将Postgres序列重置为下一个ID

时间:2016-01-13 21:16:20

标签: mysql ruby-on-rails postgresql data-migration

发生了什么?

我们从MySQL迁移到Postgres并让Laravel使用psql驱动程序而不是mysql重新运行它的迁移。工作得很好 - 它设置数据库就好了。由于我们正在从Laravel迁移到Rails,因此我们创建了rails迁移来重命名字段以使其更像“类似轨道”。以及将db数据(不是结构)导入postgres。我们遇到了很多问题,但最重要的是序列现在已经被自动增量。他们试图从1开始。

我能想出什么?

我可以使用像SELECT pg_catalog.setval('availabilities_id_seq', 700, false);之类的东西手动重置所有这些内容,但这对于包含这么多表格的多个环境执行此操作并非常有帮助。 有没有办法可以想到找到最后一个自动增量ID,然后从中设置序列?

如果您有点好奇,这里有Rails迁移移动数据,任何人都有关于我们如何做错的提示(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

1 个答案:

答案 0 :(得分:1)