通过ActiveRecord调用Postgre SQL转储

时间:2013-01-09 11:22:36

标签: ruby-on-rails ruby postgresql rails-activerecord

我有一个SQL转储,我希望通过ActiveRecord执行。我正在尝试这个:

ActiveRecord::Base.connection.execute(File.read(sql_seeds))

但是我收到了这个错误:

rake aborted!
PG::Error: ERROR:  syntax error at or near "1"
LINE 18: 1 Shanghai 2012-12-20 10:31:31.350111 2012-12-20 10:31:31.35...

在SQL脚本的这一行:

COPY locations (id, description, created_at, updated_at) FROM stdin;
1       Shanghai        2012-12-20 10:31:31.350111      2012-12-20 10:31:31.350111

一些迹象:

  • ActiveRecord::Base.connection.execute("\\i #{sql_seeds}")不起作用,因为\ipsql命令(谢谢@JiříPospíšil和@RichardHuxton)

  • 我不想%X( psql -U #{user} -H #{host} -P #{pass} ... ),因为我会使用现有的ActiveRecord数据库连接。

  • 我正在使用PostgreSQL 9.2。

2 个答案:

答案 0 :(得分:3)

问题是\ipsql的命令,而不是postgresql的命令。您不能直接在查询中使用它。此外,我没有看到导入工作时execute方法失败的原因。

我认为你必须抛出,即使这意味着创建另一个数据库连接。请注意,您不需要直接组装psql命令,可以使用db命令:

rails db < seeds.sql

通过这种方式,您可以在config/database.yml中重用当前环境中的连接信息。

答案 1 :(得分:1)

问题是COPY FROM stdin;使用pg_dump --inserts进行简化可以解决问题。