Postgresql 是否可以将主键设置为可延迟?
我的问题是关于。 我想切换定义为主键的表的两个id 但不幸的是,我想要切换ID的表已经创建,并且主键约束没有设置为doPostgresql 是否可以将主键设置为可延迟?,postgresql,Postgresql,我的问题是关于。 我想切换定义为主键的表的两个id 但不幸的是,我想要切换ID的表已经创建,并且主键约束没有设置为dodelerable 我尝试使用以下语句将其设置为可推迟: alter table\u name alter constraint primary\u key\u name\u pkey可延迟 并得到一个错误: 关系“table\u name”的约束“primary\u key\u name\u pkey”不是外键约束 有没有办法在创建后将主键约束设置为可延迟 感谢您的帮助。如Po
delerable
我尝试使用以下语句将其设置为可推迟:
alter table\u name alter constraint primary\u key\u name\u pkey可延迟代码>
并得到一个错误:
关系“table\u name”的约束“primary\u key\u name\u pkey”不是外键约束
有没有办法在创建后将主键约束设置为可延迟
感谢您的帮助。如PostgreSQL源代码中所述:
/*
* ALTER TABLE ALTER CONSTRAINT
*
* Update the attributes of a constraint.
*
* Currently only works for Foreign Key constraints.
* Foreign keys do not inherit, so we purposely ignore the
* recursion bit here, but we keep the API the same for when
* other constraint types are supported.
资料来源:
因此,即使使用Pg12,这也是不可能的。我认为您需要删除并重新创建PK,在创建PK时将其标记为可延迟。对于一对行,可能的解决方法是通过临时值进行交换。(这可能会影响触发器等,但无论如何更改PK值都是可疑的…)如果存在引用PK的外键控件,您似乎无法延迟PK。我的Workaround是一个小型python脚本,它删除了所有外键约束和PK本身,对id进行了id交换,然后再次恢复了所有约束。