Postgresql 11 Разделение подробных таблиц на основе столбца в главной таблице в отношении внешнего ключа

Улучшения в декларативном разделении на основе диапазонов в версии 11, похоже, действительно могут работать для моего варианта использования, но я не совсем уверен, как внешние ключи работают с разделами.

У меня есть столы Files -< Segments -< Entries в котором сотни сегментов на файл и сотни записей на сегмент, поэтому записи порядка 10000 раз больше файлов. Файлы имеют поле CreationDate, и клиенты будут определять срок хранения, чтобы они удаляли старые записи. Все это ясно указывает на разделы на основе даты, поэтому быстрее запрашивать самые последние записи и легко отбрасывать старые.

Первая проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь создать таблицу Files, мне кажется, что я должен включить createDate как часть первичного ключа, чтобы он был в разделе RANGE:

CREATE TABLE Files2
  (
    FileId BIGSERIAL PRIMARY KEY,
    createdDate timestamp with time zone,
    filepath character varying COLLATE pg_catalog."default" NOT NULL
  ) PARTITION BY RANGE (createdDate)
  WITH (
    OIDS = FALSE
  )                                
  TABLESPACE pg_default;
ERROR:  insufficient columns in PRIMARY KEY constraint definition
DETAIL:  PRIMARY KEY constraint on table "files2" lacks column "createddate" which is part of the partition key.

Если я опускаю "ПЕРВИЧНЫЙ КЛЮЧ" из определения FileId, я не получаю ошибку, но влияет ли это на эффективность дочерних поисков?

Я также не знаю, как объявить разделы для дочерней таблицы. PARTITION BY RANGE (Files.createdDate) не работает

Поскольку этот вариант использования возможен только в версии 11, я не нашел много информации об этом и был бы признателен за любые указания! Спасибо!

1 ответ

Я считаю, что это новая функция версии 11. Есть документ, из которого вы можете получить следующую информацию:

"Ограничение первичного ключа должно включать в себя столбец ключа раздела. Попытка создать ограничение первичного ключа, не содержащего столбцы с разделами, приводит к ошибке"

https://h50146.www5.hpe.com/products/software/oe/linux/mainstream/support/lcc/pdf/PostgreSQL11NewFeaturesGAen20181022-1.pdf

Другие вопросы по тегам