PostgreSQL中的约束名称更新

76 postgresql constraints

是否可以在Postgres中更改约束名称?我添加了PK:

ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
Run Code Online (Sandbox Code Playgroud)

我希望它有不同的名称,以与系统的其余部分保持一致.我要删除现有的PK约束并创建一个新约束吗?还是有"软"方式来管理它?

谢谢!

Art*_*ero 129

要重命名PostgreSQL 9.2或更高版本中的现有约束,可以使用ALTER TABLE:

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;
Run Code Online (Sandbox Code Playgroud)

  • @Erlan,您可以通过查询“pg_catalog”获取所有约束的列表,通过“LOOP”迭代它并使用动态查询来重命名。 (2认同)

Mag*_*der 74

对于主键,您应该能够:

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name
Run Code Online (Sandbox Code Playgroud)

但这不适用于其他类型的约束.最好的选择是删除旧的并创建一个新的.务必在事务中执行此操作,因此在重建期间系统不存在.(如果你不能在一个事务做,一定要创建新的一个第一,丢弃旧的前)


Pau*_*haw 7

我们发现主键通常落后于主表名称。该脚本帮助我们识别并修复存在问题的脚本。

select 
    table_name, 
    constraint_name , 
    'ALTER TABLE ' || table_name || ' RENAME CONSTRAINT ' || constraint_name || ' TO ' || left(table_name, 58) || '_pkey;'
from information_schema.table_constraints tc
where constraint_type  = 'PRIMARY KEY' 
and constraint_name <> left(table_name, 58) || '_pkey';
Run Code Online (Sandbox Code Playgroud)

这会找到主键名称不再是“默认”模式 ( <tablename>_pkey) 的所有表,并为每个表创建一个重命名脚本。

上述代码中的 58 个字符限制是为了考虑约束名称的最大大小(63 字节)。

显然,在运行之前检查返回的内容。希望这对其他人有帮助。