web-dev-qa-db-ja.com

AWS RDS PostgreSQLダンプ/復元-構文エラー

EC2インスタンスから同じサブネット上のRDSにpostgresqlデータベースをインポートしようとしていますが、これまでのところ次のようにしています...

1)EC2 DBをダンプする:

pg_dump --Host localhost --port 5432 -Fc --encoding='UTF8' -U postgres ProcessorDB > /home/jboss/proc_dump_jan15.dump

2)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

リモートDBに接続できますが、次のエラーが発生します。

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ですが、ダンプ/復元が移行を処理するため、これは問題ないと思いますか?

2
DaveB

pg_dump(カスタム)を含む-Fc出力はSQLスクリプトではなく、pg_restoreのみが処理できる圧縮アーカイブです。

ダンプファイルをpg_restoreに渡し、その出力をpsqlにパイプすることができます(多くの場合、そのようにして、試行したものに近い):

pg_restore /home/jboss/proc_dump_jan15.dump | psql  --Host=blahrds [other options]...

...またはpg_restoreの-​​d、-h、...およびその他のオプションを使用してデータベースに接続し、psqlの呼び出しをスキップします。

詳細については、pg_restore9.3のマンページ を参照してください。

Nb。 EC2データベースはPG 9.0で、RDSデータベースはPG 9.3.5ですが、ダンプ/復元が移行を処理するため、これは問題ないと思いますか?

推奨される方法は、9.0データベースに対してpg_dump 9.3を使用してダンプを作成することです。その理由は、新しいバージョンでは常に、古いデータベースを抽出してバージョンに完全にインポートする方法を知っているためです。 pg_dump 9.0がリリースされた時点で、作成者は将来のバージョンでどのような互換性の問題が発生するかわからないため、その逆は当てはまりません。

6
Daniel Vérité