PostgreSQLテーブルを変更して列を一意にするにはどうすればよいですか?


166

私はPostgreSQLにテーブルがあり、スキーマは次のようになります:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

次に、テーブルを変更することで、パーマリンクをテーブル全体で一意にします。誰かがこれを手伝ってくれる?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name 2014年

回答:



231

または、次のコマンドを使用して、DBに自動的に制約名を割り当てます。

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
これを行うと、postgresが制約を作成しますが、名前は「自動的に」割り当てられ、「追加」という単語が割り当てられます。私は試してみました
サンティ

上記の構文を使用すると、Postgressは新しい制約を作成し、その名前mytable_mycolumn_key にとても満足しています:-)
Adam

41

複数の列の一意制約を作成することもできます。

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

これは次のようなALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);場合には機能しないようです: またはALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.