Wie kann ich mehrere Primärschlüssel in Postgres verwenden?
Das kannst du nicht. Es ist ein Oxymoron - die Definition eines Primärschlüssels ist, dass es der Primärschlüssel ist, Singular. Sie können nicht mehr als eine haben.
Sie können mehrere unique
Einschränkungen haben. Sie können einen Primärschlüssel haben, der mehrere Spalten enthält (einen zusammengesetzten Primärschlüssel). Sie können jedoch nicht mehr als einen Primärschlüssel für eine Tabelle haben.
Der angezeigte Code erzeugt jedoch nicht den von Ihnen erwähnten Fehler:
$ 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
$
Vermutlich haben Sie diese Tabelle bereits definiert und ignorieren die vorherigen Fehler und zeigen dann nur den letzten an. Wenn ich diesen Code erneut ausführe, erhalte ich die Ausgabe:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Der eigentliche Fehler hier ist natürlich der erste.
Ich empfehle dringend, immer -v ON_ERROR_STOP=1
in zu verwenden psql
, z.
$ 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
$
Sehen Sie, wie es beim ersten Fehler stoppt?
(Dies wäre die Standardeinstellung, würde jedoch die Abwärtskompatibilität beeinträchtigen.)