У меня есть следующая таблица в postgres:
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
Я делаю следующие вставки:
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
В первых 2 вставках я явно упоминаю идентификатор. Однако указатель автоматического увеличения таблицы в этом случае не обновляется. Следовательно в 3-й вставке я получаю ошибку:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
Я никогда не сталкивался с этой проблемой в Mysql как в движках MyISAM, так и в INNODB. Явно или нет, mysql всегда обновляет указатель автоинкремента на основе максимального идентификатора строки.
Какой обходной путь для этой проблемы в postgres? Мне это нужно, потому что я хочу более жесткий контроль для некоторых идентификаторов в моей таблице.
UPDATE:
Мне это нужно, потому что для некоторых значений мне нужно иметь фиксированный идентификатор. Для других новых записей я не против создания новых.
Я думаю, что это возможно, вручную увеличивая указатель nextval
до max(id) + 1
всякий раз, когда я явно вставляю идентификаторы. Но я не уверен, как это сделать.