POSTGRESQL 9+:如何从列中删除默认/序列(如果存在)?

时间:2019-06-13 13:42:55

标签: sequence default postgresql-9.4

我正在尝试从ID列中删除默认约束。此查询应可用于ID可能具有或不具有该约束的多个表。根据postresql 9+ doc(我使用9.4),“如果存在”条件不能再用于删除约束。 (请参见https://www.postgresql.org/message-id/25298.1281743639%40sss.pgh.pa.ushttps://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不直接依赖于它),否则,应该这样做什么都没有。

0 个答案:

没有答案