PostgreSQL:默认约束名称

时间:2010-11-05 16:30:46

标签: postgresql naming-conventions constraints

在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);

这导致了我所参与的项目的一些命名不一致,并提示以下问题:

  1. 是否有一种简单的方法可以在现有表格中添加一个约束,如果在创建表格时添加了该约束,它将会收到该名称?

  2. 如果没有,是否应该完全避免默认名称以防止出现不一致?

2 个答案:

答案 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);