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);
これにより、私が取り組んでいるプロジェクトで名前の不一致が発生し、次の質問が表示されます。
テーブルの作成中に追加された場合に受け取った名前で、既存のテーブルに制約を追加する簡単な方法はありますか?
そうでない場合、矛盾を防ぐためにデフォルト名を完全に避けるべきですか?
manual はこれについてかなり明確です( "tableconstraint:この形式はCREATE TABLEと同じ構文を使用してテーブルに新しい制約を追加します。 ")
だからあなたは単に実行することができます:
ALTER TABLEの例ADD UNIQUE(a、b);
PostgreSQLのインデックスの標準名は次のとおりです。
{tablename}_{columnname(s)}_{suffix}
ここで、接尾辞は次のいずれかです。
pkey
は主キー制約用key
ユニーク制約excl
idx
その他の種類のインデックスの場合fkey
は外部キー用check
チェック制約の場合シーケンスの標準接尾辞は
seq
すべてのシーケンス一意制約の証明:
注意:CREATE TABLE/UNIQUEは、テーブル "example"の暗黙的なインデックス "example_a_b_key"を作成します