como posso usar várias chaves primárias no postgres?
Você não pode. É um oxímoro - a definição de uma chave primária é que é a chave primária, singular. Você não pode ter mais de um.
Você pode ter várias unique
restrições. Você pode ter uma chave primária que contenha várias colunas (uma chave primária composta). Mas você não pode ter mais de uma chave primária para uma tabela.
No entanto, o código que você mostra não produz o erro que você mencionou:
$ 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
$
Suponho que você já tenha definido essa tabela e ignorando os erros anteriores, mostrando apenas o último. Se eu reexecutar esse código, obtenho a saída:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
O verdadeiro erro aqui é o primeiro, é claro.
Eu recomendo sempre o uso -v ON_ERROR_STOP=1
de psql
, por exemplo:
$ 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
$
Veja como ele pára no primeiro erro?
(Seria o padrão, mas isso quebraria a compatibilidade com versões anteriores).