【发布时间】:2021-06-02 15:51:12
【问题描述】:
我使用以下命令获取 PostgreSQL 数据库备份:
pg_dump --encoding utf8 "host=localhost port=5432
dbname=employee user=postgres" > C:\backup\employee.sql
注意:我尝试了使用和不使用--encoding 参数。还尝试使用许多不同的文件格式进行备份:dump、tar 等。
然后我尝试使用以下命令恢复数据库:
psql -e -h 127.0.0.1 -p 5432 -U postgres -d employee -f C:\backup\employee.sql
恢复过程中控制台有很多行,但是在这个日志的末尾,显示以下错误:
psql:C:\backup\employee.sql:1:错误:“ÿs”处或附近的语法错误 第 1 行:ÿs-ebSG:9loios3"s"des9",e3s{0LrT}0se"me"D13,mispRio""""aild{...
我该如何解决?我可能会通过conv 转换备份文件编码,但是由于我使用的是 Windows,所以我无法使用它。
更新:
-
我正在转储的 Postgres 版本:PostgreSQL 12.6 on x86_64-pc-linux-gnu,由 Debian clang 版本 10.0.1 编译,64 位
-
我要恢复到的 Postgres 版本:x86_64-pc-linux-gnu 上的 PostgreSQL 11.12 (Debian 11.12-1.pgdg90+1),由 gcc (Debian 6.3.0-18+deb9u1) 6.3.0 编译20170516, 64位
-
我正在使用的 pg_dump 版本:我查看了容器以检查 pg_dump 版本,但无法获取 pg_dump 文件夹。
【问题讨论】:
-
更新您的问题以包括以下内容:1) 在源数据库和目标数据库中,
\l显示的数据库employee的编码是什么? 2) 错误前后的线路输出是什么?如果它在我那里,我会在恢复时删除-e。这只会产生掩盖你真正追求的东西的线条,错误。 -
1) 源数据库:编码:UTF8,排序规则/字符类型:en_US.UTF8。源数据库是在还原过程之前创建的。 2) 一些错误,例如“pg_restore:错误:无法设置 default_table_access_method”
-
请阅读整个评论。我要求您将此信息与目标数据库的编码一起添加到您的问题中。还要添加到问题 1)您正在转储的 Postgres 版本? 2) 您要恢复到的 Postgres 版本? 3)
pg_dump你正在使用的版本? -
@AdrianKlaver 请查看我的更新。谢谢。
-
要获取 pg_dump 版本,请执行
pg_dump -V。此外,您的原始命令显示您在 Windows 文件系统中工作,但 Postgres 版本显示它们在 Linux 上。请解释差异。
标签: database windows postgresql restore database-backups