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=1
in を使用することを強くお勧めします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
$
最初のエラーで停止する方法を確認しますか?
(これがデフォルトですが、下位互換性が失われます)。