PostgreSQL 中的约束名称更新

问题描述 投票:0回答:4

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

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

我想给它起一个不同的名称,以与系统的其他部分保持一致。 我应该删除现有的 PK 约束并创建一个新的吗?或者有没有一种“软”的方式 管理它吗?

谢谢!

postgresql constraints
4个回答
228
投票

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

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;

103
投票

对于主键,您应该能够:

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name

但这不适用于其他类型的约束。 最好的选择是放弃旧的并创建一个新的。请务必在事务内执行此操作,以便在重建过程中没有它系统将无法运行。 (如果您无法在事务中执行此操作,请务必先创建新事务,然后再删除旧事务)


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

这会找到主键名称不再是“默认”模式 (
<tablename>_pkey

) 的所有表,并为每个表创建一个重命名脚本。

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.