comment puis-je utiliser plusieurs clés primaires dans postgres?
Tu ne peux pas. C'est un oxymore - la définition d'une clé primaire est que c'est la clé primaire, singulière. Vous ne pouvez pas en avoir plus d'un.
Vous pouvez avoir plusieurs unique
contraintes. Vous pouvez avoir une clé primaire qui contient plusieurs colonnes (une clé primaire composite). Mais vous ne pouvez pas avoir plus d'une clé primaire pour une table.
Cependant, le code que vous montrez ne produit pas l'erreur que vous avez mentionnée:
$ 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
$
À une supposition, vous avez déjà défini ce tableau et vous ignorez les erreurs précédentes, puis n'affichez que la dernière. Si je réexécute ce code, j'obtiens la sortie:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
La vraie erreur ici est bien sûr la première.
Je recommande fortement de toujours utiliser -v ON_ERROR_STOP=1
dans psql
, par exemple:
$ 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
$
Voyez comment cela s'arrête à la première erreur?
(Ce serait la valeur par défaut mais cela briserait la compatibilité descendante).