Как я могу использовать несколько первичных ключей в Postgres?
Ты не можешь Это оксюморон - определение первичного ключа является то , что это первичный ключ, единственным числа. Вы не можете иметь более одного.
Вы можете иметь несколько unique
ограничений. У вас может быть первичный ключ, который содержит несколько столбцов (составной первичный ключ). Но вы не можете иметь более одного первичного ключа для таблицы.
Тем не менее, код, который вы показываете, не производит ошибку, которую вы упомянули:
$ 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
$
Возможно, вы уже определили эту таблицу и игнорируете предыдущие ошибки, а затем показывает только последнюю. Если я перезапущу этот код, я получу вывод:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Настоящая ошибка здесь, конечно, первая.
Я настоятельно рекомендую всегда использовать -v ON_ERROR_STOP=1
в psql
, например:
$ 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
$
Видите, как это останавливается при первой ошибке?
(Это будет по умолчанию, но это нарушит обратную совместимость).