Что произошло?Сбросить последовательность Postgres до следующего идентификатора
Мы перенесли с MySQL на Postgres и запустили Laravel его миграции с помощью драйвера psql вместо mysql. Отлично работает - он просто настраивает базу данных. Поскольку мы переходим из Laravel в Rails, мы создали миграцию рельсов, чтобы переименовать поля, чтобы быть более «рельсовыми», а также импортировать данные db (а не структуру) в postgres. Мы столкнулись с множеством проблем, но, самое главное, последовательности теперь используются для автоматического увеличения. Они пытаются начать с 1.
Что я могу не увидеть?
Я могу вручную сбросить все из них, используя что-то вроде SELECT pg_catalog.setval('availabilities_id_seq', 700, false);
, но это не очень полезно, поскольку мы делаем это в нескольких средах с таким количеством таблиц. Есть ли способ, по которому вы можете найти последний идентификатор автоинкремента, а затем установить последовательность из этого?
В случае вам интересно, здесь рельсов миграции для перемещения данных упаковывают кого-то есть советы о том, как мы сделали это неправильно (my_models является массивом таблиц):
my_models.each do |m|
puts m
"Mysql#{m}".constantize.find_each(batch_size: 100) do |old_model|
new_model = m.constantize.new
new_model.attributes = old_model.attributes
new_model.save
end
end