PostgreSQL 11分区表上的外键

7
在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 Error [0A000]。如果使用复合主键(uuid,registration_date),那么它可以工作。因为主键包含分区列。

结论:在分区表中创建主键存在限制(主键需要包含分区列)。

尝试创建外键

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]。这意味着分区表上的外键无法工作。
也许我做错了什么。也许有人已经尝试过这个功能并知道它是如何工作的。 也许有人知道除了在应用程序中实现约束之外的解决方法。
2个回答

12

看起来这个功能将成为v12的一部分,详见:https://commitfest.postgresql.org/22/1877/ - Blama

8
Postgres 11仅支持从分区表到(非分区)表的外键。以前甚至这也不可能,这就是发布说明的内容。该限制在手册的有关分区的章节中有记录。

虽然支持在分区表上使用主键,但不支持引用分区表的外键。(支持从分区表到其他表的外键引用。)

(强调我的)


我们可以以旧有方式(继承+触发器)使用它吗? - Spike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接