1. ホーム
  2. postgresql

[解決済み] PostgreSQL: デフォルトの制約名

2023-01-18 19:20:01

質問

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. そうでない場合、不整合を防ぐためにデフォルトの名前は完全に避けるべきでしょうか?

どのように解決するのですか?

この マニュアル はこれに関してかなり明確です(" tableconstraint: このフォームは、CREATE TABLEと同じ構文でテーブルに新しい制約を追加します。 ")。

ですから、単に実行するだけでいいのです。

ALTER TABLE example ADD UNIQUE (a, b)を実行します。