2016-01-13 7 views
0

Что произошло?Сбросить последовательность 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 

ответ