Postgres заполненный пропущенный первичный ключ - PullRequest
0 голосов
/ 18 марта 2020

У меня есть таблица postgres, и ее первичным ключом является автоприращение без знака int. Насколько мне известно о postgres, postgres сохраняет эти автоматически увеличивающиеся значения в виде последовательностей. Поэтому, если запись удаляется из таблицы и указанный первичный ключ c удаляется, следующая вставленная строка не будет повторно использовать ранее удаленный первичный ключ.

Теперь в таблице, о которой я упоминал, было первые 6 строк долгое время отбрасывались go, (первичные ключи: 1,2,3,4,5,6), а между тем новые записи были вставлены, но странно то, что в какой-то момент времени не совсем после того, как строки были отброшены, эти первые несколько строк были заполнены, и теперь используются первичные ключи с 1 по 6, хотя postgres должен был продолжаться.

В какой-то момент времени нам пришлось иметь дело с вздутием живота, и мы справились с этим путем уборки пылесосом, но я не думаю, что это является основной причиной этой проблемы.

Я знаю, что в этом типе вопросов отсутствует часть контекста и трудно что-то отладить, не видя проблемы на самом деле, но главная проблема опять-таки заключается в том, почему первичный ключ использовался повторно?

Надежда кого-то с большим опытом и пониманием того, как postgres горе rks может рассказать мне о какой-то скрытой механике, о которой я не знаю.

Спасибо!

1 Ответ

1 голос
/ 19 марта 2020

Даже если столбец по умолчанию взят из последовательности, вы все равно можете вставить для него значение c, если хотите. Поэтому наиболее вероятное объяснение состоит в том, что какой-то одержимый человек заметил пробел и решил заполнить его, чтобы восстановить баланс во вселенной.

create table foobar (x bigserial, y text);
insert into foobar values (23, 'yes'); --set explicitly
insert into foobar values (default, 'no');
insert into foobar (y) values ('maybe');

select * from foobar;
 x  |   y   
----+-------
 23 | yes
  1 | no
  2 | maybe

Или, может быть, кто-то сбросил последовательность, чтобы начать с 1, и как только он столкнулся с существующие строки и начали выбрасывать ошибки, затем они исправили созданную ими проблему, сбросив ее до максимального значения +1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...