2011-08-22 23 views
12

根據標題我需要導入,但PG備份給我嚴格的Postgres SQL不能與MySQL一起工作,也有我認爲是UTF-16的非指定編碼。使用db:pull在完成前需要很長的時間和錯誤。 我會很感激任何建議。謝謝。如何從Heroku導入大型數據庫到本地mysql或sqlite3?

+0

我也有類似的發出─如何讓備份*不*安裝PG本地。你可能想編輯你的問題來包括這個(如你在下面的評論中所做的那樣)。 –

回答

23

在本地設置PostgreSQL,使用PG backups將數據從Heroku複製到本地計算機,然後pg_restore將其導入到新的本地PostgreSQL中。然後,您可以將其從PostgreSQL複製到本地MySQL或SQLite,而無需擔心超時。或者,因爲在此之後您將擁有功能強大的PostgreSQL安裝,只需在PostgreSQL之上開始開發,以便您的開發堆棧更好地匹配您的部署堆棧;在同一個數據庫上開發和部署是個好主意。

您可能會從Heroku獲得二進制轉儲(即pg_dump -Fc),這將解釋爲什麼轉儲看起來像某種UTF-16廢話。

可以使用pgbackups addon導出數據庫轉儲

$ heroku addons:add pgbackups # To install the addon 
$ curl -o latest.dump `heroku pgbackups:url` # To download a dump 
+1

嗨畝,謝謝,但安裝PG開發是我想避免的。在開發中使用相同的數據庫可能很有用,但對於大多數項目,這只是不值得,我會堅持使用SQLite3。 – aledalgrande

+2

最後,我結束了安裝PG(或者您可以使用Lion附帶的一個)。這個過程是: *創建一個PG用戶 *和pg_restore 恢復轉儲*安裝**第**和** **水龍頭寶石 *開始Postgres的水龍頭服務器:'水龍頭服務器的Postgres:// root @ localhost/rcp_dev tapsuser tapspassword' *將數據提取到sqlite3(對於mysql相同):'taps pull sqlite://db/development.sqlite3 http:// tapsuser:tapspassword @ localhost:5000' – aledalgrande

+4

@aledalgrande:如果您部署到Heroku,開發PostgreSQL絕對是值得的。所有數據庫都有細微的差別(GROUP BY,區分大小寫,布爾值,功能可用性,數據類型,轉換需求,截斷或引發異常......),並且沒有ORM可以保護您免受所有數據庫的攻擊。保存自己的一些悲傷,開發和部署在同一個堆棧上。 –

22

的Heroku對如何做到這一點的說明:https://devcenter.heroku.com/articles/heroku-postgres-import-export#restore-to-local-database,這歸結爲:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump 

其中myuser是當前用戶和mydb是當前數據庫。

如果您使用的是Postgres.app,在本地複製生產數據庫非常簡單。你可以離開了-U myuser除非另有配置它,並通過運行$ psql -h localhost創建一個數據庫,然後CREATE DATABASE your_database_name;(從Postgres.app documentation,然後運行上面的命令,你就設置。

4

按照終端這4個簡單的步驟
Heroku Dev Center):

  1. 安裝Heroku的備份工具:

    $ heroku addons:add pgbackups 
    
  2. 開始使用它:

    $ heroku pgbackups:capture 
    
  3. 下載在Heroku遠程數據庫(到本地機器上)使用curl:

    $ curl -o latest.dump 'heroku pg:backups public-url' 
    
  4. 加載*:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump 
    
    • 讓您的用戶名,並選擇來自您的config/database.yml文件的所需數據庫。
    • DATABASE_NAME可以成爲你的開發/測試/生產數據庫(例mydb_development)

這就是它!

UPDATE:將其更新爲新的接口

相關問題