PostgreSQL 11の場合 リリースノート パーティショニング機能に次の改善点が見つかりました。
この機能が必要で、テストしました。
テーブルを作成します:
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エラー[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エラー[42809]が発生します。これは、パーティションテーブルのFOREIGN KEYが機能しないことを意味します。
たぶん私は何か間違ったことをしています。多分誰かがこの機能を試して、これがどのように機能するかを知っています。たぶん誰かがアプリケーションに制約を実装する以外の回避策を知っています。
Postgres 11は、パーティションテーブルから(非パーティション)テーブルへの外部キーfromのみをサポートします。
以前はそれさえ不可能でしたが、それがリリースノートの目的です。
この制限は、マニュアルの パーティショニングに関する章 に記載されています。
主キーはパーティション化されたテーブルでサポートされていますが、パーティション化されたテーブルを参照する外部キーはサポートされていません。 (パーティションテーブルから他のテーブルへの外部キー参照がサポートされています。
(強調鉱山)