с новым именем и в неё переносятся данные из старой таблицы - 100 строк.
Но они идут не по порядку с пмк id от 1 до 100, а со сдвигом от 10 до 110.
Затем при штатной работе с таблицей в неё добавляется запись.
И эта запись вместо id = 111 вставляется с id = 1.
Следующая запись добавляется с id = 2 и так далее, пока не дойдёт до 10.
Десятая запись будет с ошибкой, что id 10 уже есть.
Как указать в миграции после переноса всех данных, чтобы вставка в таблицу началась с id = 111?
select setval('seq_name', select max(id) from table); типа такого
У вас там к полю id "привязана" секвенция. Надо её поправить.
А seq_name нужно создавать перед созданием таблицы. Верно? CREATE SEQUENCE seq_name START 1
То, что привязана я понимаю. Не понимаю как поправить. Пробовал, удалять и пересоздавать, но что-то я не то делаю... DROP SEQUENCE id CREATE SEQUENCE id START 111
alter sequence id restart with 111 не надо удалять ничего)
Ага. Ок. Спс. Пробую.
В клиенте psql выполните команду "\d+ TABLE_NAME" Почти наверняка для поля ID оно покажет нужную секвенцию. И не надо ничего дропать.
Вообще, в вашем случае можно сделать alter sequence seq_name owned by none; А в скрипте создания таблицы заменить serial на integer default nextval('seq_name') таким образом, при удалении таблицы, сиквенс останется (но если таблицу будете удалять с концами, придётся вручную это делать. Но лучше всего замените drop table на truncate table в миграции, нет никакого смысла в пересоздании объектов БД при миграции, тупо мусор в системных таблицах добавляете.
Ок. Благодарю.
Обсуждают сегодня