我正在尝试将 postgresql 数据库从 EC2 实例导入到同一子网上的 RDS,到目前为止,我正在执行以下操作...
1) 转储 EC2 数据库:
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
我能够连接到远程数据库,但出现以下错误:
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
(通常以这种方式完成并接近您尝试过的内容):...或使用 -d,-h,... 和其他选项
pg_restore
使其连接到数据库并跳过psql
调用。有关详细信息,请参见
pg_restore
9.3的联机帮助页。推荐的方法是针对 9.0 数据库使用 pg_dump 9.3 来创建转储。原因是较新的版本总是知道如何提取较旧的数据库,以便它们可以完美地导入到它们的版本中。反之则不然,因为显然在 pg_dump 9.0 发布的时候,作者并不知道未来的版本可能会带来什么样的兼容性问题。