2013-01-09 62 views
1

我有一個SQL轉儲,我想通過ActiveRecord執行。我想這樣的:通過ActiveRecord調用Postgre 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。

+0

\ i查詢的文檔在哪裏?我沒有找到任何。 – phoet

+0

這是一個Postgres命令,你可以在這裏找到:http://www.postgresql.org/docs/9.2/static/backup-dump.html 可以在1.SQL在SQL腳本中使用它,比如你寫'\ i 2.sql',2.sql的內容會被執行 – mdesantis

+0

對不起,但是究竟在哪裏? – phoet

回答

1

問題是COPY FROM stdin;與pg_dump --inserts重組解決了這個問題。

3

的問題是,\ipsql的命令,而不是postgresql的。你不能直接在查詢中使用它。另外我也沒有看到爲什麼execute方法在導入工作時會失敗的原因。

我認爲你將不得不退出,即使這意味着創建另一個數據庫連接。請注意,您不需要直接組裝psql命令,你可以使用db命令:

rails db < seeds.sql 

這樣你就可以重新用於當前環境中config/database.yml連接信息。

+0

謝謝,我更新了這個問題 – mdesantis