2014-01-16 106 views
0

我想從我的客戶的以前的軟件供應商給予我的備份(不再在圖片中)創建一個Postgres數據庫。但我正在努力解決編碼問題。我對Postgres不太熟悉(MySQL是我的東西),所以請原諒我的努力。創建/恢復數據庫Postgres編碼問題

當我運行psql dbname < /path/to/file.backup,它吐出來的各種開頭invalid command和帶有問號的和奇怪的字符,並且輸出的最後一行的字符串結束行是:

ERROR: invalid byte sequence for encoding "UTF8": 0xf1 0x16 0x88 0x02 

我打開備份文件在我的終端,我看到許多SQL字符串與非打印字符穿插(表示爲「^ @」)。有朝頂一些字符串,我認爲可能是與此有關:

SET client_encoding = 'UTF8'; 

SET standard_conforming_strings = 'off'; 

CREATE DATABASE "cleaned_DB" WITH TEMPLATE = template0 ENCODING = 'UTF8' \ 
    LC_COLLATE = 'English_United States.1252' \ 
    LC_CTYPE = 'English_United States.1252'; 

所以看起來像數據庫w一樣如使用UTF8編碼,但軟件供應商的開發機器使用WIN1252。我猜想備份文件中的字符串在WIN1252中?

如何導入此數據庫?作爲參考,我的開發機器運行Mac OSX。

回答

1

備份是「自定義格式」備份,而不是SQL腳本。您可以使用pg_restore命令來恢復它。請參閱the docs for pg_restore

編碼的東西將是一個更大的問題。使用PostgreSQL的Windows和Linux之間的語言環境和編碼情況非常糟糕。 pg_restore很可能無法創建數據庫,如果要將其作爲還原過程的一部分創建它,因爲在Mac OS X上ctype English_United States.1252不存在,所以它是Windows主機。

我想你將不得不做的是你自己的數據庫CREATE DATABASE與相應的LC_CTYPELC_COLLATEen_US.utf-8。然後恢復到現有的數據庫。

+0

'pg_restore'完美運作。謝謝!!! – curtisdf