我正在尝试从ID列中删除默认约束。此查询应可用于ID可能具有或不具有该约束的多个表。根据postresql 9+ doc(我使用9.4),“如果存在”条件不能再用于删除约束。 (请参见https://www.postgresql.org/message-id/25298.1281743639%40sss.pgh.pa.us和https://www.postgresql.org/docs/9.4/sql-altertable.html)。
我想知道是否有一种解决方法,除了拥有2个版本的查询外,一个版本包含查询,另一个版本不包含查询,并手动检查每个表以决定要使用的查询。
尝试使用“如果存在”会返回语法错误,但是在没有默认值的情况下进行删除(似乎没有任何条件)(我等了几分钟没有任何反应)。
让我们使用表t,第一列名为id,类型为int,没有默认值:
这将返回语法错误:
ALTER TABLE t
ALTER COLUMN id
DROP DEFAULT if exists;
如果没有默认值,则不会返回:
ALTER TABLE t
ALTER COLUMN id
DROP DEFAULT;
如果id具有默认值,我希望查询从id列中删除默认值(它后面的序列仍将使用,我只希望id不直接依赖于它),否则,应该这样做什么都没有。