SQL Server条件创建默认约束语句转PostgreSQL语法咨询
SQL Server 条件创建默认约束语句转 PostgreSQL 实现
PostgreSQL 不支持 SQL Server 原生的 IF...BEGIN 风格的 DDL 条件执行语法,可通过 DO 语句执行 PL/pgSQL 匿名块实现完全对齐原逻辑的功能,对应代码如下:
DO $$ BEGIN -- 校验条件:Flex表存在revision列 且 不存在名为df_revision的默认约束 IF EXISTS ( SELECT 1 FROM pg_attribute WHERE attrelid = 'Flex'::regclass AND attname = 'revision' AND attisdropped = false ) AND NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'df_revision' AND conrelid = 'Flex'::regclass AND contype = 'd' ) THEN ALTER TABLE Flex ADD CONSTRAINT df_revision DEFAULT 0 FOR revision; END IF; END $$;
补充说明
- 以上写法适用于 PostgreSQL 11 及以上版本,该版本开始支持显式命名默认约束。如果使用 PostgreSQL 10 及更早版本,不支持自定义默认约束名,可将
ALTER TABLE语句替换为:ALTER TABLE Flex ALTER COLUMN revision SET DEFAULT 0;,此时默认约束名由 PostgreSQL 自动生成。 - 如果你的表、列在创建时使用双引号强制了大小写规则,需要将代码中对应的表名、列名、约束名字符串调整为匹配的大小写,必要时用双引号包裹。
内容的提问来源于stack exchange,提问作者Keshav Narsu
相关产品推荐
相关产品推荐

