是否可以更改 Postgres 中的约束名称? 我添加了 PK:
ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
我想给它起一个不同的名称,以与系统的其他部分保持一致。 我应该删除现有的 PK 约束并创建一个新的吗?或者有没有一种“软”的方式 管理它吗?
谢谢!
要重命名现有约束在 PostgreSQL 9.2 或更高版本中,您可以使用 ALTER TABLE:
ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;
对于主键,您应该能够:
ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name
但这不适用于其他类型的约束。 最好的选择是放弃旧的并创建一个新的。请务必在事务内执行此操作,以便在重建过程中没有它系统将无法运行。 (如果您无法在事务中执行此操作,请务必先创建新事务,然后再删除旧事务)
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 字节)。显然,在运行之前检查返回的内容。希望对其他人有帮助。
ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;
事实证明,我们现有的约束以
"FK_"
开头,即大写前缀。
在这种情况下,我们必须将约束名称括在双引号中,即:ALTER TABLE name RENAME CONSTRAINT "FK_constraint_name" TO "FK_new_constraint_name";