【问题标题】:Don't understand where is syntax error ? PostgreSQL 11不明白语法错误在哪里? PostgreSQL 11
【发布时间】:2019-06-10 08:30:56
【问题描述】:

PostgreSQL 版本:11.1 平台:OSX Mojave 10.14.1

这是我的 SQL 代码:

COPY (select nom,prenom,num_carte,pdv_carte,email,date_naissance from compte where num_carte != '' order by id_compte) TO :export_file WITH DELIMITER AS ';' CSV FORCE QUOTE * ENCODING 'UTF-8';

该行位于由 shell 脚本调用的 .sql 文件中,如下所示:

psql --dbname=test -U postgres --set adresses=$DATA_ADRESSE --set export_file="$EXPORT_FILE" --file=$ANO_SQL 1>>$ANO_LOG

这样声明的 EXPORT_FILE 变量:

export EXPORT_FILE=‎⁨"'export_for_fid.csv'"

尝试了许多解决方案,但都没有奏效,总是出现相同的语法错误:

ERROR:  syntax error at or near "‎⁨"
LINE 1: ...where num_carte != '' order by id_compte) TO ‎⁨'export_for_fid.csv' WITH D...
                                                       ^

【问题讨论】:

  • select version();的输出是什么
  • 是的,对不起,我忘记了版本PostgreSQL 11.1 on x86_64-apple-darwin, compiled by Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn), 64-bit
  • 你可以在你的shell脚本中使用--set export_file="$EXPORT_FILE" --file=$ANO_SQ而不是here-document。这将大大简化您的报价。

标签: sql postgresql shell syntax-error psql


【解决方案1】:

您可以在 shell 脚本中使用 here-document,而不是使用 --file 和 --set 参数:(注意:我将 COPY 替换为 \COPY

#!/bin/sh

EXPORT_FILE="export_for_fid.csv"
DB_NAME="test"

psql --dbname=${DB_NAME} -U postgres <<OMG
\COPY (select nom,prenom,num_carte,pdv_carte,email,date_naissance from compte where num_carte <> '' order by id_compte) TO '${EXPORT_FILE}' WITH DELIMITER AS ';' CSV FORCE QUOTE * ENCODING 'UTF-8';
OMG

#eof

【讨论】:

  • 但是我的 csv 的路径必须是相对的?或者它可能是一个绝对路径?
  • 两者。 (试试看!)请注意,COPY 路径指的是 server(作为用户 postgres),\COPY 路径位于 client 端。
  • 除非你指定connected-as用户可以写入的路径(如/tmp/myfile.csv
  • 非常感谢你的帮助,但是当我想使用路径时我有这个:‎⁨/tmp/export_for_fid.csv: No such file or directory
  • 也许它存在于另一台机器上? (客户端 服务器)
猜你喜欢
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多