У меня есть следующая таблица в 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')
В первых двух вставках я явно упоминаю id. Однако в этом случае указатель автоматического увеличения указателя таблицы не обновляется. Следовательно, в третьей вставке я получаю ошибку:
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
, когда я явно вставляю идентификаторы. Но я не уверен, как это сделать.