Postgresql 11 Разделение подробных таблиц на основе столбца в главной таблице в отношении внешнего ключа - PullRequest
0 голосов
/ 07 декабря 2018

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

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

Первая проблема, с которой я сталкиваюсь, заключается в том, что при попытке создать таблицу «Файлы»звучит так, как будто я должен включить 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 Ответ

0 голосов
/ 15 января 2019

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

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

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

...