在PostgreSQL中创建表时,如果未提供默认约束名称,则会分配默认约束名称:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
但是使用ALTER TABLE
添加约束似乎是强制名称:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
这导致了我所参与的项目的一些命名不一致,并提示以下问题:
是否有一种简单的方法可以在现有表格中添加一个约束,如果在创建表格时添加了该约束,它将会收到该名称?
如果没有,是否应该完全避免默认名称以防止出现不一致?
答案 0 :(得分:203)
PostgreSQL中索引的标准名称是:
{tablename}_{columnname(s)}_{suffix}
其中后缀为以下之一:
pkey
表示主键约束key
获取唯一约束excl
了解排除约束idx
用于任何其他类型的索引fkey
获取外键check
表示检查约束序列的标准后缀是
seq
证明你的UNIQUE约束:
注意:CREATE TABLE / UNIQUE会 创建隐式索引 表“example”的“example_a_b_key”
答案 1 :(得分:29)
manual对此非常清楚(“ tableconstraint:此表单使用与CREATE TABLE相同的语法为表添加新约束。”)
所以你可以简单地运行:
ALTER TABLE example ADD UNIQUE (a, b);