come posso usare più chiavi primarie in Postgres?
Non puoi. È un ossimoro - la definizione di chiave primaria è che è la chiave primaria, singolare. Non puoi averne più di uno.
Puoi avere più unique
vincoli. Puoi avere una chiave primaria che contiene più colonne (una chiave primaria composita). Ma non puoi avere più di una chiave primaria per una tabella.
Tuttavia, il codice che mostri non produce l'errore che hai citato:
$ 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
$
Probabilmente hai già definito questa tabella e stai ignorando gli errori precedenti, mostrando quindi solo l'ultimo. Se rieseguo questo codice ottengo l'output:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Il vero errore qui è il primo, ovviamente.
Consiglio vivamente di usare sempre -v ON_ERROR_STOP=1
in psql
, ad esempio:
$ 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
$
Vedi come si ferma al primo errore?
(Sarebbe il valore predefinito ma interromperebbe la compatibilità con le versioni precedenti).