分区表上的外键

问题描述 投票:0回答:1

在 Postgresql 分区表上添加外键的最佳方法是什么?

第一种方法

在子表上添加外键始终为 NOT VALID。

ALTER TABLE <partition_name> 
    ADD CONSTRAINT <foreign_key_name> 
        FOREIGN KEY (someId) REFERENCES reftable(someId) NOT VALID;

验证子表上的外键。

ALTER TABLE <partition_name> VALIDATE CONSTRAINT <foreign_key_name>;

在父表上创建外键。

ALTER TABLE <parent_table_name> 
    ADD CONSTRAINT <foreign_key_name> 
        FOREIGN KEY (someId) REFERENCES reftable(someId);

第二种方法

在父表上添加外键为 NOT VALID。

ALTER TABLE <parent_table_name> 
    ADD CONSTRAINT <foreign_key_name> 
        FOREIGN KEY (someId) REFERENCES reftable(someId) NOT VALID;

验证父表上的外键:

ALTER TABLE <parent_table_name> VALIDATE CONSTRAINT <foreign_key_name>;
postgresql foreign-keys partitioning
1个回答
1
投票

答案很简单:第二种方法是不可能的,并且会导致错误

ERROR:  cannot add NOT VALID foreign key on partitioned table "<parent_table_name>" referencing relation "reftable"
DETAIL:  This feature is not yet supported on partitioned tables.

因此,通过排除,第一种方法是更好的方法。它还最大限度地减少锁定:只有在分区表上创建约束的最后一条语句需要与数据修改冲突的锁,并且该语句将非常快。

© www.soinside.com 2019 - 2024. All rights reserved.