1

我有一个想要通过 ActiveRecord 执行的 SQL 转储。我正在尝试这个:

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 。

4

2 回答 2

3

问题是这\i是一个psql' 命令,而不是postgresql'。您不能直接在查询中使用它。此外,我看不出execute在导入有效时该方法会失败的原因。

我认为您将不得不掏空,即使这意味着创建另一个数据库连接。注意不需要psql直接组装命令,可以使用db命令:

rails db < seeds.sql

这样您就可以config/database.yml在当前环境中重用连接信息。

于 2013-01-09T12:11:34.587 回答
1

问题是COPY FROM stdin;减少与pg_dump --inserts解决问题。

于 2013-01-09T13:31:39.787 回答