【问题标题】:Syntax error when running Query: "syntax error at or near "\""运行查询时出现语法错误:“在“\”或附近出现语法错误”
【发布时间】:2019-07-31 20:57:10
【问题描述】:

我已经生成了一个我想用来恢复数据库的 postgres sql 脚本。当我去我的备份服务器尝试恢复时,我收到错误:““\”或附近的语法错误。

卡在后面的字符“.”上

这些看起来像这样:

COPY admin.roles (role_id, role_name, is_role_auto) from stdin;
\.

这句话有什么问题?有没有我错过的配置?我在 Windows 上使用 PostgreSQL 11.4。

【问题讨论】:

  • 您使用哪个工具来运行该语句?将数据传递给 copy ... from stdin 是只有 psql 支持的扩展。
  • 我正在 PG-Admin 中运行查询。

标签: postgresql


【解决方案1】:

您不能使用 pgAdmin 来恢复使用 pg_dump 获取的“纯格式”转储。它不理解 psql 语法,其中 COPY 及其数据是交错的。

您必须使用psql 来恢复转储:

psql -h server -p 5432 -U user -d database -f dumpfile.sql

【讨论】:

  • MacOS 提示:您首先需要通过 HomeBrew 安装它 - brew install libpq && brew link --force libpq
【解决方案2】:

如果不完整查看备份和恢复命令,很难知道具体错误,但如果有帮助,这是我想将表从生产复制到备份服务器时使用的样板:

$BIN/pg_dump -h production_server -p 5432 \
       --dbname=postgres \
       --superuser=postgres \
       --verbose \
       --format=c \
       --compress=9 \
       --table=admin.roles > backup.sql

$BIN/pg_restore \
      --host=backup_server \
      --port=5432 \
      --username=postgres \
      --dbname=postgres \
      --clean \
      --format=custom \
      backup.sql

format=c(或--format=custom)使内容完全不可读,但从好的方面来说,它还避免了分隔符等任何奇怪的错误,它还完美地复制了复杂的数据结构,如数组和 BLOB。

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多