可以在Postgres中更改约束名称吗?我添加了一个PK:
ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
我想给它取个不同的名字,和系统的其他部分保持一致。是否删除现有PK约束并创建一个新约束?或者有没有一种“软”的方式来管理它?谢谢!
z31licg01#
要在PostgreSQL 9.2或更高版本**中重命名现有约束,可以使用ALTER TABLE:
ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;
zlwx9yxi2#
对于主键,您应该能够:
ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name
ipakzgxi3#
我们发现主键经常落后于主表名。这个脚本帮助我们识别和修复有问题的问题。
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字节)。显然,在运行之前要检查返回的内容。希望对其他人有帮助。
<tablename>_pkey
7gyucuyw4#
我们在尝试以这种格式运行命令时收到42704错误:
原来我们现有的约束是从"FK_"开始的。在这种情况下,我们必须将约束名称括在双引号中,即:
"FK_"
ALTER TABLE name RENAME CONSTRAINT "FK_constraint_name" TO "FK_new_constraint_name";
4条答案
按热度按时间z31licg01#
要在PostgreSQL 9.2或更高版本**中重命名现有约束,可以使用ALTER TABLE:
zlwx9yxi2#
对于主键,您应该能够:
ipakzgxi3#
我们发现主键经常落后于主表名。这个脚本帮助我们识别和修复有问题的问题。
这将查找主键名称不再是“默认”模式(
<tablename>_pkey
)的所有表,并为每个表创建一个重命名脚本。上述代码中的58个字符限制是为了考虑约束名称的最大大小(63字节)。
显然,在运行之前要检查返回的内容。希望对其他人有帮助。
7gyucuyw4#
我们在尝试以这种格式运行命令时收到42704错误:
原来我们现有的约束是从
"FK_"
开始的。在这种情况下,我们必须将约束名称括在双引号中,即: