В PostgreSQL 11 Примечания к выпуску Я обнаружил следующие улучшения в функциональности разделения:
- Добавлена поддержка PRIMARY KEY, FOREIGN KEY, индексов и триггеров для многораздельных таблиц
Мне нужна эта функция и она проверена.
Создать таблицу:
CREATE TABLE public.tbl_test
(
uuid character varying(32) NOT null,
registration_date timestamp without time zone NOT NULL
)
PARTITION BY RANGE (registration_date);
Попробуйте создать первичный ключ:
ALTER TABLE public.tbl_test ADD CONSTRAINT pk_test PRIMARY KEY (uuid);
Я получаю ошибку SQL Error [0A000].Если использовать композитный PK (uuid, registration_date), то это работает.Поскольку PK содержит столбец секционирования
Вывод: создание PK в таблицах секционирования работает с ограничениями (в PK требуется колонка секционирования).
Попробуйте создать внешний ключ
CREATE TABLE public.tbl_test2
(
uuid character varying(32) NOT null,
test_uuid character varying(32) NOT null
);
ALTER TABLE tbl_test2
ADD CONSTRAINT fk_test FOREIGN KEY (test_uuid)
REFERENCES tbl_test (uuid);
Я получаю ошибку SQL Error [42809].Это означает, что FOREIGN KEY на таблицах разделения не работает.
Возможно, я что-то делаю не так.Может быть, кто-то пробовал эту функциональность и знает, как это работает.Может быть, кто-нибудь знает обходной путь, кроме реализации ограничений в приложении.