Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:默认约束名称_Postgresql_Naming Conventions_Constraints - Fatal编程技术网

PostgreSQL:默认约束名称

PostgreSQL:默认约束名称,postgresql,naming-conventions,constraints,Postgresql,Naming Conventions,Constraints,在PostgreSQL中创建表时,如果未提供默认约束名称,将指定默认约束名称: CREATE TABLE example ( a integer, b integer, UNIQUE (a, b) ); 但使用altertable添加约束时,名称似乎是必需的: ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b); 这导致我所从事的项目的命名不一致,并引发以下问题: 有

在PostgreSQL中创建表时,如果未提供默认约束名称,将指定默认约束名称:

CREATE TABLE example (
    a integer,
    b integer,
    UNIQUE (a, b)
);
但使用
altertable
添加约束时,名称似乎是必需的:

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
这导致我所从事的项目的命名不一致,并引发以下问题:

  • 有没有一种简单的方法可以将约束添加到现有表中,如果在表创建过程中添加约束,该约束的名称将是它所接收的名称

  • 如果不是,是否应该完全避免默认名称以防止不一致


  • PostgreSQL中索引的标准名称为:

    {tablename}{columnname}{suffix}

    其中,后缀为以下之一:

    • pkey
      用于主键约束
    • 用于唯一约束
    • excl
      用于排除约束
    • idx
      用于任何其他类型的索引
    • fkey
      用于外键
    • 检查检查约束
    序列的标准后缀是

    • seq
      适用于所有序列
    唯一约束的证明:

    注意:创建表格/唯一遗嘱 创建隐式索引 表“示例”的“示例a\U b\U键”

    这个问题非常清楚(“tableconstraint:此表单使用与CREATE table相同的语法向表添加新约束。”)

    因此,您可以简单地运行:

    ALTER TABLE example ADD UNIQUE (a, b); 更改表格示例添加唯一(a,b);
    正是出于这个原因,我制定了一条规则来避免使用默认名称-最终会出现这样的情况:在每个部署中,约束都有不同的名称。非常有用,谢谢!值得补充的是,外键使用后缀
    fkey
    ,多列外键约束似乎只包括第一列名称。@IanMackinnon,这应该是最好的答案!这个信息是黄金!您可以通过运行例如
    CREATE TABLE mytable(mycolumn numeric UNIQUE)来确认这些
    这正是我在谷歌搜索“postgresql索引命名约定”时寻找的答案@someone啊对不起,我想我的意思是E.4.3.3实用程序命令的结束。这是E.4.3.4数据类型之前的最后一个项目:“为外键选择默认约束名称时使用所有键列的名称(Peter Eisentraut)”啊!我错误地包括了
    约束
    更改表示例添加约束唯一性(a,b)和获取错误。非常感谢。