Postgresql

AWS RDS PostgreSQL 轉儲/恢復 - 語法錯誤

  • February 3, 2015

我正在嘗試將 postgresql 數據庫從 EC2 實例導入到同一子網上的 RDS,到目前為止,我正在執行以下操作…

  1. 轉儲 EC2 數據庫:
pg_dump --host localhost --port 5432 -Fc --encoding='UTF8' -U postgres ProcessorDB > /home/jboss/proc_dump_jan15.dump
  1. 從 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 發布的時候,作者並不知道未來的版本可能會帶來什麼樣的兼容性問題。

引用自:https://dba.stackexchange.com/questions/90962