Изменение GenerationType.IDENTITY на GenerationType.SEQUENCE (и обратно) PostgreSQL - PullRequest
0 голосов
/ 26 ноября 2018

У нас была база данных с сущностями, использующими GenerationType.IDENTITY.Были некоторые технические проблемы с ним, и я заменил его на GenerationType.SEQUENCE, потому что я неправильно понял, что делает SEQUENCE.Теперь у нас есть таблицы базы данных, которые нумеруются с приращением +1 до тех пор, пока не начнется использование SEQUENCE -> там нумерация распределяется по всем таблицам и быстро превращается в огромные числа с огромными пробелами в каждой таблице, поскольку она распределяется по всей системе.

Когда я вернулся к ИДЕНТИЧНОСТИ, он начал нумерацию там, где остановился, когда последний раз использовал ИДЕНТИЧНОСТЬ.Может ли (и что произойдет, если) IDENTITY предоставить номер, который будет совпадать с номером SEQUENCE?(к сожалению, я не могу на самом деле проверить это, потому что последняя запись IDENTITY, например, 9000, а первая SEQUENCE - 25 мил - это потому, что в течение месяца много добавлений / удалений в БД)

Есть ли возможностьзатем начать нумерацию IDENTITY с последнего значения SEQUENCE?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 26 ноября 2018

Разница между IDENTITY и SEQUENCE - наименьшая в PostgreSQL - в том, что IDENTITY создает последовательность для каждой таблицы, а SEQUENCE использует одну глобальную последовательность для всех таблиц, как вы заметили.

Предполагая, что у вас есть объект с именем MyEntity(или my_entity в качестве имени таблицы) - в стратегии IDENTITY - должна быть последовательность с именем, похожим на: my_entity_id_sequence .SEQUENCE может быть названо (это зависит от реализации JPA), например hibernate_sequence .

Если вы можете получить доступ к базе данных - например, с помощью - вы можете просто проверитьПоследовательность IDENTITY и установите ее значение:.

ALTER SEQUENCE my_entity_id_sequence RESTART with_your_value;

, где with_your_value может быть, например,

SELECT max(id)+1 FROM my_entity;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...