Postgresql
AWS RDS PostgreSQL 轉儲/恢復 - 語法錯誤
我正在嘗試將 postgresql 數據庫從 EC2 實例導入到同一子網上的 RDS,到目前為止,我正在執行以下操作…
- 轉儲 EC2 數據庫:
pg_dump --host localhost --port 5432 -Fc --encoding='UTF8' -U postgres ProcessorDB > /home/jboss/proc_dump_jan15.dump
- 從 EC2 恢復:
psql -f /home/jboss/proc_dump_jan15.dump --host=blahrds.11938475.eu-west-1.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=ProcessorDB
我能夠連接到遠端數據庫,但出現以下錯誤:
psql:/home/jboss/proc_dump_jan15.dump:1: ERROR: syntax error at or near "PGDMP" LINE 1: PGDMP REVOKE ALL ON SCHEMA public FROM postgres; ^ GRANT GRANT psql:/home/jboss/proc_dump_jan15.dump:5: ERROR: syntax error at or near "" LINE 1: 'en' ^ psql:/home/jboss/proc_dump_jan15.dump:14: ERROR: syntax error at or near "" LINE 1: 'free', ^ psql:/home/jboss/proc_dump_jan15.dump:21: ERROR: syntax error at or near "" LINE 1: 'windows',
這繼續,然後更改為:
psql:/home/jboss/proc_dump_jan15.dump:316: ERROR: invalid byte sequence for encoding "UTF8": 0xc2 0x40 psql:/home/jboss/proc_dump_jan15.dump:316: invalid command \?0?4 psql:/home/jboss/proc_dump_jan15.dump:317: invalid command \?????M? psql:/home/jboss/proc_dump_jan15.dump:318: invalid command \)??LF,?C?{<??y??ݚ???Ɲ???0??{?dV ? psql:/home/jboss/proc_dump_jan15.dump:321: ERROR: invalid byte sequence for encoding "UTF8": 0xbd psql:/home/jboss/proc_dump_jan15.dump:331: invalid command \?`?v?ʺ??;6????6??N??.????c?~???&?G(?? psql:/home/jboss/proc_dump_jan15.dump:335: invalid command \@(??n']??sIZ??1VZ?º???????j?+??λ?=L?E??ܡ|c?0t psql:/home/jboss/proc_dump_jan15.dump:338: invalid command \?A???N??/hL???Q??G??r psql:/home/jboss/proc_dump_jan15.dump:354: invalid command \??I?$?R?o??¬???NJ?-F'??x?0z??z??hŗc? psql:/home/jboss/proc_dump_jan15.dump:357: invalid command \x?r?Y??gMb~?墶6wб??m'aem?o????]X?s?????}??u?&?;-xY8?1)?}c??-@??h?K???IA?֒qv??Hs?g??J?DoD?Y?m psql:/home/jboss/proc_dump_jan15.dump:361: invalid command \??W?]U?22?U-??N? psql:/home/jboss/proc_dump_jan15.dump:362: invalid command \4??im?@??ښ?S?j???ꨫ?d܊פJ?cu??l!?ް̳u?5+^O??>=?k+]???A??5????~??N???0??:=??ՙM?3zm psql:/home/jboss/proc_dump_jan15.dump:372: invalid command \HF??w? psql:/home/jboss/proc_dump_jan15.dump:378: invalid command \g?#?s?t?I,???T?}5???
為簡潔起見縮短…
我發現了“用於編碼“UTF8”的無效字節序列”並將 –encoding 屬性添加到轉儲命令中,但這沒有任何效果
有誰知道可能是什麼問題?我錯過了轉儲選項嗎?AWS 文件在這裡有點含糊
NB。EC2 數據庫是 PG 9.0,RDS 數據庫是 PG 9.3.5,但我認為這沒問題,因為轉儲/恢復將處理遷移?
pg_dump
帶有(custom)的輸出-Fc
不是 SQL 腳本,而是只能pg_restore
處理的壓縮存檔。您可以將轉儲文件傳遞給
pg_restore
並將其輸出通過管道傳輸到psql
(通常以這種方式完成並接近您嘗試過的內容):pg_restore /home/jboss/proc_dump_jan15.dump | psql --host=blahrds [other options]...
…或使用 -d,-h,… 和其他選項
pg_restore
使其連接到數據庫並跳過psql
呼叫。有關詳細資訊,請參見
pg_restore
9.3的聯機幫助頁。NB。EC2 數據庫是 PG 9.0,RDS 數據庫是 PG 9.3.5,但我認為這沒問題,因為轉儲/恢復將處理遷移?
推薦的方法是針對 9.0 數據庫使用 pg_dump 9.3 來創建轉儲。原因是較新的版本總是知道如何提取較舊的數據庫,以便它們可以完美地導入到它們的版本中。反之則不然,因為顯然在 pg_dump 9.0 發布的時候,作者並不知道未來的版本可能會帶來什麼樣的兼容性問題。