postgres'de birden çok birincil anahtarı nasıl kullanabilirim?
Yapamazsın. Bu bir oksimoron - birincil anahtarın tanımı , birincil anahtar, tekil olmasıdır. Birden fazla olamaz.
Birden fazla unique
kısıtlamanız olabilir. Birden çok sütun içeren bir birincil anahtarınız olabilir (bileşik birincil anahtar). Ancak bir tablo için birden fazla birincil anahtarınız olamaz.
Ancak, gösterdiğiniz kod bahsettiğiniz hataya neden olmaz:
$ 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
$
Bir tahminde aslında bu tabloyu zaten tanımladınız ve önceki hataları görmezden geliyorsunuz, sonra sadece sonuncuyu gösteriyorsunuz. Bu kodu yeniden çalıştırmak çıktı almak:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Buradaki gerçek hata elbette ilk hata.
Şiddetle hep kullanmanızı tavsiye -v ON_ERROR_STOP=1
içinde psql
örneğin:
$ 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
$
İlk hatada nasıl durduğunu görüyor musunuz?
(Varsayılan olurdu, ancak geriye dönük uyumluluk bozulur).