PostgreSQL中的约束名称更新

时间:2009-06-09 18:37:06

标签: postgresql constraints

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

ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);

我想为它设置不同的名称,以便与系统的其他部分保持一致。 我要删除现有的PK约束并创建一个新约束吗?或者是否有“软”的方式 管理吗?

谢谢!

3 个答案:

答案 0 :(得分:115)

要在PostgreSQL 9.2或更新版本中重命名现有约束,您可以使用ALTER TABLE

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;

答案 1 :(得分:69)

对于主键,您应该能够:

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name

但这对其他类型的约束无效。最好的选择是删除旧的约束并创建一个新约束。务必在事务中执行此操作,因此在重建期间系统不存在。 (如果你不能在交易中做到这一点,请务必在删除旧的之前创建新的

答案 2 :(得分:2)

我们发现主键通常落后于主表名称。该脚本可帮助我们确定并解决有问题的地方。

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';

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

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

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