2011-05-27 93 views
8

我們正在開發一個網站,當我們在本地開發(我們其中一個來自Windows)時,我們使用sqlite3,但在服務器(linux)上使用postgres。我們希望能夠將生產數據庫導入到我們的開發過程中,所以我想知道是否有辦法將postgres數據庫轉儲轉換爲sqlite3可以理解的東西(只是給它提供了postgres的傾銷SQL給了很多,很多錯誤)。或者只是在Windows上安裝postgres會更容易些?謝謝。如何將postgres數據庫轉換爲sqlite

+14

我想你的開發環境,只需切換到PostgreSQL是在一個數據庫之上開發的(尤其是像SQLite一樣寬鬆和寬容的),但部署在另一個數據庫上(特別是像PostgreSQL那樣嚴格的數據庫)通常是惡化和惡作劇的祕訣。 – 2011-05-27 07:15:49

+8

迴應mu的迴應,不要這樣做。不要這樣做。不要這樣做。開發和部署在同一件事情上。否則做不好的工程實踐。 – Kuberchaun 2011-05-27 14:38:33

+0

[在ServerFault上的同樣的問題。](https://stackoverflow.com/questions/6148421/how-to-convert-a-postgres-database-to-sqlite) – Zaz 2015-05-11 20:26:55

回答

7

有一些轉換工具各地:

http://sqlite.com/cvstrac/wiki?p=ConverterTools

難道是容易只是在Windows上安裝的Postgres?

也許,這樣做是非常簡單的。

+3

我不確定我會用「非常簡單」的話我必須經歷[很多痛苦](http://stackoverflow.com/questions/7086654/installing-postgres-on-windows-for- use-with-ruby-on-rails/7133391#7133391)來做到這一點。值得一提,因爲它允許您捕獲在使用更嚴格的Postgres到達生產服務器之前發生的SQL查詢錯誤。 – AJP 2011-08-23 14:37:22

+1

該鏈接導致自2009年起棄用的頁面。 – TKAB 2016-07-16 08:45:25

-1

這是很容易在此描述我使用水龍頭寶石做: http://railscasts.com/episodes/342-migrating-to-postgresql

而且我使用Postgres.app在我的Mac開始(無需要安裝,刪除應用程序在你的應用程序目錄,雖然可能必須添加一行到您的PATH環境變量,如文檔中所述),並使用Induction.app作爲GUI工具來查看/查詢數據庫。

+0

但是,這個問題是關於如何反過來 - 從postgres到sqlite,而不是postgres,因爲您的評論和參考建議。 – nealmcb 2012-12-31 18:09:27

+6

你是對的 - 我沒有仔細閱讀它(因爲當我看到'convert'+'postgres'+'sqlite'在同一標題中時,在一百年內我不會有人想要走另一個方向) – jpwynn 2012-12-31 23:10:45

9

我發現this blog entry這將指導您完成這些步驟:

  1. 創建PostgreSQL數據庫的轉儲。

    ssh -C [email protected] pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql 
    
  2. 刪除/修改轉儲。

    1. 刪除線開始SET
    2. 刪除線開始SELECT pg_catalog.setval
    3. 替換爲 't'
    4. 真替換爲 'f' 假
  3. 添加BEGIN;作爲第一線和END;作爲最後一行

  4. 重新創建一個空的開發數據庫。 bundle exec rake db:migrate

  5. 導入轉儲。

    sqlite3 db/development.sqlite3 
    sqlite> delete from schema_migrations; 
    sqlite> .read dump.sql 
    

當然通過ssh連接並創建一個新的數據庫使用耙子是可選

+3

對我來說,'t'和'f'不起作用,我不得不使用'1'和'0'來描述這些帖子:http://stackoverflow.com/questions/5768364/activerecordstatementinvalid-sqlite3sqlexception-no-這種列真的 – neRok 2016-06-11 03:35:59

+1

斑點保存在不同的格式。 sqlite使用x'010101',而postgres'\ x0101' – 2016-10-18 11:57:11

1

STEP1:使你的數據庫結構的轉儲和數據

pg_dump --create --inserts -f myPgDump.sql -d myDatabaseName -U myUserName -W myPassword 

STEP2:刪除一切除了myPgDump外的CREATE TABLES和INSERT語句。SQL(使用文本編輯器)

STEP3:初始化SQLite數據庫通過結構和數據你的Postgres轉儲

sqlite3 myNewSQLiteDB.db -init -myPgDump.sql 

STEP4:用你的數據庫;)