Dav*_*veB 2 postgresql aws postgresql-9.3 amazon-rds
我正在尝试将 postgresql 数据库从 EC2 实例导入到同一子网上的 RDS,到目前为止,我正在执行以下操作...
1) 转储 EC2 数据库:
pg_dump --host localhost --port 5432 -Fc --encoding='UTF8' -U postgres ProcessorDB > /home/jboss/proc_dump_jan15.dump
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我能够连接到远程数据库,但出现以下错误:
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',
Run Code Online (Sandbox Code Playgroud)
这样继续下去,然后更改为:
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???
Run Code Online (Sandbox Code Playgroud)
为简洁起见缩短...
我发现了“用于编码“UTF8”的无效字节序列,并将 --encoding 属性添加到转储命令中,但这没有任何效果
有谁知道可能是什么问题?我在转储上缺少一个选项吗?AWS 文档在这里有点含糊
铌。EC2 数据库是 PG 9.0,RDS 数据库是 PG 9.3.5 但我认为这没问题,因为转储/恢复将处理迁移?
一个pg_dump
与输出-Fc
(自定义)是不是一个SQL脚本,它是一个压缩的档案,只有pg_restore
能够处理。
您可以将转储文件传递给pg_restore
并将其输出通过管道传输到psql
(通常以这种方式完成并接近您尝试的内容):
pg_restore /home/jboss/proc_dump_jan15.dump | psql --host=blahrds [other options]...
Run Code Online (Sandbox Code Playgroud)
...或使用 -d,-h,... 和其他选项pg_restore
使其连接到数据库并跳过psql
调用。
有关详细信息,请参阅pg_restore
9.3 的联机帮助页。
铌。EC2 数据库是 PG 9.0,RDS 数据库是 PG 9.3.5 但我认为这没问题,因为转储/恢复将处理迁移?
推荐的方法是针对 9.0 数据库使用 pg_dump 9.3 来创建转储。原因是新版本总是知道如何提取旧数据库,以便它们可以完美地导入到它们的版本中。反之则不然,因为显然在 pg_dump 9.0 发布的时候,作者不知道未来的版本可能会带来什么兼容性问题。