2013-12-11 49 views
22

我想從Heroku的postgres數據庫中導入另一個數據庫的備份sql文件。你是怎樣做的?如何將.sql文件導入Heroku postgres數據庫?

+0

該解決方案也將是相關的一些人: http://stackoverflow.com/questions/42433414/heroku-database-restore-issue/42435490#42435490 –

回答

54

這是你如何做到這一點:

heroku pg:psql --app YOUR_APP_NAME_HERE < updates.sql 

如果您想將生產恢復到分期(假設兩者的Heroku Postgres的數據塊):

heroku pgbackups:restore YOUR_STAGING_DATABASE_NAME `heroku pgbackups:url --app YOUR_PRODUCTION_APP_NAME` --app YOUR_STAGING_APP_NAME --confirm YOUR_STAGING_APP_NAME 

請務必保留「heroku pgbackups:url --app YOUR_PRODUCTION_APP_NAME」周圍的特殊單引號。

-------- Heroku的工具區更新--------

的Heroku最近更新了他們的工具區做舊的命令不再有效(見this link獲取更多信息)。以下是恢復命令的新版本。

heroku pg:backups restore `heroku pg:backups public-url -a YOUR_PRODUCTION_APP_NAME` YOUR_STAGING_DATABASE_NAME --app YOUR_STAGING_APP_NAME --confirm YOUR_STAGING_APP_NAME 
+2

在第一個例子,如果你有應用超過1個數據庫,你可以通過做'Heroku的PG指定非默認(不使用'DATABASE_URL'一):PSQL HEROKU_POSTGRESQL_GREEN_URL --app YOUR_APP_NAME_HERE <更新.sql'爲例。當然,用你自己的db URL環境變量代替我在這個例子中的變量。 – juanpaco

2

將SQL加載到本地Postgres實例中,並確保它是正確的。那麼在這裏使用方向轉儲數據:https://devcenter.heroku.com/articles/heroku-postgres-import-export

最後,上傳轉儲到一個公共的網絡服務器(如S3)並恢復到Heroku的是這樣的:

heroku pgbackups:restore DATABASE 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' 
+1

有沒有一種辦法沒有本地數據庫嗎?我有一個SQL語句的.sql文件。它具有所有的CREATE TABLES和插入數據。我只需要一種方法將該SQL發送到Heroku上的Postgres。 –

+0

是的,您可以使用PgAdmin遠程連接到您的Heroku數據庫並將SQL代碼粘貼到其中。不過,我強烈建議設置一個本地數據庫,以便您可以遵循12個因子原則並能夠在本地進行調試:http://12factor.net/ – dankohn

+0

@Jeff - 查看我的答案,您不需要有一個本地數據庫或連接PgAdmin,你可以通過命令行輕鬆完成。 – SergeyB

9

製作備份文件:

pg_dump -U USERNAME DATABASE --no-owner --no-acl -f backup.sql 

從SQL文件還原到的Heroku:

heroku pg:psql --app APPNAME < backup.sql 

(獎金)刪除從Heroku的應用程序數據庫中所有表(例如):

heroku pg:reset --app APPNAME HEROKU_POSTGRESQL_ROSE 

從po獲取DATABASE_URL sgresql Heroku的面板(PSQL線)

+2

謝謝!我看到的其他地方都表示我必須上傳到S3。 – sventechie

+1

--->連接到DATABASE_URL 輸入是PostgreSQL自定義格式轉儲。 使用pg_restore命令行客戶端將此轉儲還原到數據庫。 – Pak

相關問題