Могу ли я изменить тип идентификатора автоинкремента в postgresql и не сломать все вокруг?

У меня есть таблица postgresql с идентификатором автоинкремента, который является целым числом (он был создан python django). Итак, теперь я достиг целочисленного max_value 2,14 миллиарда строк.

И согласно этому ответу (postgresql - целое число вне допустимого диапазона) я хочу изменить тип столбца id в biginteger. И мой общий вопрос - если его изменить, автоинкремент не сломается? И не должно ли это изменить мои данные в этой таблице? Должен ли я создавать новые последовательности после этих изменений?

Это описание этого столбца в postgresql:

Column|  Type   |            Modifiers                                                     | Storage  
id    | integer | not null default nextval('parsedata_app_ticket_id_seq'::regclass)        | plain

person Zext    schedule 16.07.2019    source источник


Ответы (1)


Нет, вам просто нужно изменить тип данных столбца, последовательность в любом случае будет генерировать большие целые числа:

alter table the_table
   alter id type bigint
person a_horse_with_no_name    schedule 16.07.2019
comment
В качестве небольшого отзыва хочу поделиться тем, что происходит с этим делом. Я сделал это как в ответ, запускается очень хорошо, НО. Да, к сожалению, было одно но. Процесс начинается и продолжается, продолжается без конца. И через 2 дня я так и не закончил, и я думаю, что это стало мертвым процессом, который никогда не закончится. Я усердно доделал ее, потому что эта таблица была необходима. После этого я переименовываю старую таблицу и создаю новую с прежним именем. Итак, новая таблица уже была с bigint, и она начала получать новые данные. А старую таблицу просто использую как архив. РЕЗЮМЕ - это правильный ответ, но для больших данных НЕТ. - person Zext; 26.05.2020
comment
@Zext: ваш оператор, вероятно, ожидал блокировки стола. В следующий раз проверьте pg_stat_activity, делает ли ваш сеанс что-то или ожидает - person a_horse_with_no_name; 26.05.2020