次の表があります。
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
それは私にこのエラーを与えます:
テーブル「Word」の複数の主キーは許可されていません
Postgresで複数の主キーを使用するにはどうすればよいですか?
postgresで複数の主キーを使用するにはどうすればよいですか?
できません。それはoxymoronです-主キーの定義はそれがthe主キー、単数であることです。複数指定することはできません。
複数のunique
制約を設定できます。複数の列を含む主キー(複合主キー)を持つことができます。ただし、テーブルに複数の主キーを設定することはできません。
ただし、表示するコードは、言及したエラーを生成しません。
$ 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
もちろん、本当のエラーは最初のエラーです。
psql
では常に-v ON_ERROR_STOP=1
を使用することを強くお勧めします。例:
$ 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
$
最初のエラーで停止する方法を確認しますか?
(これがデフォルトですが、下位互換性が失われます)。