PostgreSQLの複数の主キー


13

次の表があります。

CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);

次のコマンドを使用して復元しようとすると:

psql -U postgres -h localhost -d word -f word.sql 

それは私にこのエラーを与えます:

テーブル「単語」の複数の主キーは許可されていません

postgresで複数の主キーを使用するにはどうすればよいですか?

回答:


26

postgresで複数の主キーを使用するにはどうすればよいですか?

できません。それはoxymoronです-主キーの定義は、それ主キーであり、単数であることです。複数持つことはできません。

複数のunique制約を設定できます。複数の列を含む主キー(複合主キー)を持つことができます。ただし、1つのテーブルに複数の主キーを持つことはできません。

ただし、表示するコードは、言及したエラーを生成しません。

$ psql -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
CREATE TABLE
ALTER TABLE
ALTER TABLE
$

おそらく、このテーブルは既に定義済みであり、以前のエラーを無視して、最後のエラーのみを表示していると思われます。このコードを再実行すると、出力が得られます。

ERROR:  relation "word" already exists
ALTER TABLE
ERROR:  multiple primary keys for table "word" are not allowed

もちろん、実際のエラーは最初のエラーです。

常に-v ON_ERROR_STOP=1in を使用することを強くお勧めしますpsql。例:

$ psql -v ON_ERROR_STOP=1 -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__

ERROR:  relation "word" already exists
$

最初のエラーで停止する方法を確認しますか?

(これがデフォルトですが、下位互換性が失われます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.