2013-03-06 108 views
47

我有一個.sql文件,我想在heroku上的postgres數據庫上執行一堆插入命令。但我不知道如何做到這一點: -如何在heroku上執行.sql腳本?

如果我公司已獲得Postgres的控制檯我鍵入以下內容:

psql -h localhost -d database -U username -f datafile.sql 

但似乎Heroku的不支持此命令。我試過

heroku pg:psql 

但這不讓我輸入文件。

還有其他的選擇嗎?

回答

85

類的東西播種的數據庫,我建議理查德·布朗的回答是:你可以說是最好使用類似Rails的種子機制,或照本宣科的東西像一個rake任務。

也就是說,能夠管理sql(原始文件或文件)是一項非常有用的功能,特別適用於諸如簡單查找或常規查詢等冪等事物。在這種情況下,您可以使用以下任何一種方式執行本地sql:

$ cat file.sql | heroku pg:psql --app app_name 
$ echo "select * from table;" | heroku pg:psql --app app_name 
$ heroku pg:psql --app app_name < file.sql 
+0

作品完美!謝謝 – 2013-07-10 02:33:53

+1

值得注意的是,'--app app_name'不是必需的。我從my heroku應用程序所在的目錄運行'heroku pg:psql',它檢測到應用程序名稱。除此之外,這個作品很棒! – levibostian 2015-08-28 02:32:09

+0

我得到錯誤「本地psql命令找不到。」? – wedo 2017-06-29 08:24:53

2

我喜歡可測試和可重複的更新。當我需要更新數據庫時,我會寫一個rake任務來執行更新;通過這種方式,您可以首先針對測試運行它,以確保在生產運行之前輸出是正確的。

您不會提及這是初始數據庫加載還是稍後運行,但將新數據加載到Rails數據庫的慣例是創建db:seed rake文件,您可以在db:migrate任務完成後執行該文件。

參見:http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database 和:http://railscasts.com/episodes/179-seed-data

+0

鏈接說:_「自定義Rake任務重置和種子數據庫」你正在尋找已經removed_ – chomp 2017-10-04 18:39:00

+0

那天正好舊鏈接。 Archive.org救援:http://web.archive.org/web/20130312172900/http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database – 2017-10-05 20:28:10

16

爲什麼不直接使用psql?

如果查看heroku config的輸出結果,您將看到應用程序正在使用的數據庫URL(DATABASE_URL鍵) - 如果將它們拆分爲與psql一起使用的正確位,所有這一切都將會很好。

DATABASE_URL: postgres://username:[email protected]:port/dbname 

成爲

psql -h host -p port -d dbname -U username -f datafile.sql 
+1

我收到錯誤:'FATAL:沒有pg_hba.conf主機的條目...' – joepd 2016-07-22 09:55:55

+1

請確保您使用SSL進行連接 - 可能需要在連接字符串中使用&ssl = require'。 – 2016-07-27 06:50:48