Вставьте указанные c непоследовательные значения в последовательное поле (ID) таблицы postgres - PullRequest
0 голосов
/ 30 марта 2020

Context

С одной стороны, у меня есть модель данных PostgreSQL с таблицей, в которой одно поле ID определено как serial ( который опирается на последовательность ).

С другой стороны, у меня сначала были некоторые данные, которые имеют свои собственные уникальные идентификаторы, но которые не начинались с 1, например: 1001, 1002, 1003, 1004, 1005.

Мне нужно вставить эти данные в мою таблицу, сохранив их оригинальные идентификаторы.

То, что я уже сделал

До сих пор я перезагружал последовательность до вставки, например, с использованием;

ALTER SEQUENCE serial RESTART WITH 1000;
INSET INTO my_table (id, name, type)
VALUES (1001, 'AIE', 'TC'),
VALUES (1002, 'AIF', 'TC'),
VALUES (1003, 'AII', 'TE'),
VALUES (1004, 'AIH', 'TA'),
VALUES (1005, 'AIG', 'TB'),

, которая прекрасно работает, ... пока я не встретил данные с непоследовательными идентификаторами; 2001, 2005, 2018, 2019, 2020 или 120,130,133,137,160.
В этом случае этот трюк больше не работает;

Например:

ALTER SEQUENCE serial RESTART WITH 2000;
INSET INTO my_table (id, name, type)
VALUES (2001, 'AIL', 'TA'),
VALUES (2005, 'AIM', 'TC'),
VALUES (2018, 'AIP', 'TB'),
VALUES (2019, 'AIO', 'TC'),
VALUES (2020, 'AIN', 'TD'),

Идентификаторы в my_table являются последовательными после этого; 2001, 2002, 2003, 2004, 2005, таким образом, они не соответствуют их первоначальному значению в данных.

Вопрос

Как я могу обойти / отключить режим автоматического увеличения серийного номера ID поле моей таблицы, чтобы я мог сохранить идентификаторы из своих данных при вставке их в эту таблицу?

Я не могу ни изменить типы данных модели данных, ни добавить таблицы.

Среда

PostgreSQL версия 9.5 и выше.
Независимо от ОС (Linux или Window).

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