在rails中导入CSV后,自动重置PostgreSQL表中的Max ID

时间:2014-08-09 22:46:25

标签: ruby-on-rails ruby postgresql csv

在我的应用程序中,我使用CSV导入来添加内容,但是,在CSV导入后,当我尝试创建新对象时,我收到一条错误消息,指出ID存在冲突。我已经想出如何在每次导入后手动解决此问题:

 SELECT setval('products_id_seq', max(id))
 FROM products;

虽然这有效,但我想知道在我提交CSV表之后是否有办法自动化它,但我不确定如何在ruby函数中使用SQL,任何帮助都将不胜感激!!

注意:对于我的CSV输入,我使用了this railscasts

中描述的方法

1 个答案:

答案 0 :(得分:1)

根据您在评论中对我的问题的回答(是否可以将查询添加到 Ruby 函数以及您使用 ActiveRecord 与<进行交互) em> Postgres ),我的回答如下:

我认为最好的办法是在导入 CSV 后,将上面的查询添加到 Ruby 代码中。

关于您的评论问题,是的,可以将查询添加到 Ruby 函数。

使用 ActiveRecord ,虽然他们一般不鼓励原始 SQL ,但您应该可以使用模型上的connection 用于运行查询的对象。

所以,这样的事情应该有用(没有经过测试,因为我没有方便的 Rails 设置):

query = "SELECT setval('products_id_seq', max(id))
         FROM products"

TheModel.connection.execute(query)

其中TheModel是您要使用其连接的模型对象的名称(连接到您正在进行 CSV 导入的数据库的那个)。