在 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 错误 [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 不起作用。
也许我做错了什么。也许有人尝试过这个功能并且知道它是如何工作的。也许有人知道解决方法,除了在应用程序中实现约束。