як я можу використовувати декілька первинних ключів у 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
$
Подивіться, як вона зупиняється при першій помилці?
(Це було б за замовчуванням, але це порушило б сумісність).