Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 是否可以将主键设置为可延迟?_Postgresql - Fatal编程技术网

Postgresql 是否可以将主键设置为可延迟?

Postgresql 是否可以将主键设置为可延迟?,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

我的问题是关于。 我想切换定义为主键的表的两个id

但不幸的是,我想要切换ID的表已经创建,并且主键约束没有设置为do
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交换,然后再次恢复了所有约束。