¿Cómo puedo usar varias claves principales en Postgres?
No puedes Es un oxímoron: la definición de una clave primaria es que es la clave primaria, singular. No puedes tener más de uno.
Puedes tener múltiples unique
restricciones. Puede tener una clave primaria que contenga varias columnas (una clave primaria compuesta). Pero no puede tener más de una clave primaria para una tabla.
Sin embargo, el código que muestra no produce el error que mencionó:
$ 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
$
Supongo que ya ha definido esta tabla y está ignorando los errores anteriores, y luego muestra solo el último. Si vuelvo a ejecutar este código, obtengo el resultado:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
El verdadero error aquí es el primero, por supuesto.
Recomiendo siempre utilizando -v ON_ERROR_STOP=1
en psql
, por ejemplo:
$ 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
$
¿Ves cómo se detiene en el primer error?
(Sería el valor predeterminado, pero eso rompería la compatibilidad con versiones anteriores).