如何解决PostgreSQL 恢复错误:“x”处或附近的语法错误
我使用以下命令获取我的 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 版本:PostgreSQL 11.12 (Debian 11.12-1.pgdg90+1) on x86_64-pc-linux-gnu,由 gcc (Debian 6.3.0-18+deb9u1) 编译6.3.0 20170516,64 位
-
我正在使用的 pg_dump 版本:我查看了容器以检查 pg_dump 版本,但无法获取 pg_dump 文件夹。
解决方法
这是一个经典错误,因为 PostgerSQL 无法执行二进制备份,而只能执行作为表行值副本的转储。所以文字是提取物,数字或日期被转换为文字。然后添加 SQL 命令以重新创建结构和 INSERT。
结果是一个文本文件,可以解释为一个 SQL 脚本来重建数据库。
但是这种方法的主要缺点是...转储文件必须以适当的编码方式进行编码,以避免在读取器进程将这些字节解释为非字节的情况下可以驱动文件恢复的某些字节组合打印命令,如回车、换行...
在其他数据库如 SQL Server 中没有转储,只有二进制备份,并且二进制页面只从备份文件替换到目标数据文件,避免了所有这些麻烦。
因此在进行转储时要小心,即使在提取数据或导入以重新创建数据库时也要使用推荐的编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。