You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psql导出特殊名称Schema到CSV遇双引号语法错误求助

解决psql导出带数字Schema表到CSV的引号语法错误

以下几种方法可解决你的问题:

方法1:用单引号包裹-c参数并转义内部单引号

将-c后的命令用单引号包裹,内部单引号通过'\''转义,确保shell不解析内部双引号,让psql正确识别带数字的Schema名:

psql -d "postgresql://postgres:postgres@localhost:5432/postgres" -c '\copy "9999".scenario TO '\''scenario.csv'\'' (DELIMITER '\'', '\'', ENCODING '\''UTF8'\'', FORMAT CSV, HEADER)'

方法2:使用HEREDOC传递命令(推荐,可读性更高)

在shell脚本里用HEREDOC方式,避免引号转义的繁琐,内容直接原样传递给psql:

psql -d "postgresql://postgres:postgres@localhost:5432/postgres" << 'EOF'
\copy "9999".scenario TO 'scenario.csv' (DELIMITER ',', ENCODING 'UTF8', FORMAT CSV, HEADER)
EOF

注意<< 'EOF'中的单引号会让HEREDOC内容不被shell解析,完全保留原始格式。

方法3:将命令写入SQL文件执行

创建export_scenario.sql文件,内容如下:

\copy "9999".scenario TO 'scenario.csv' (DELIMITER ',', ENCODING 'UTF8', FORMAT CSV, HEADER);

然后用psql执行该文件:

psql -d "postgresql://postgres:postgres@localhost:5432/postgres" -f export_scenario.sql

问题原因

你原命令的问题出在shell对双引号转义的解析逻辑上:用双引号包裹-c参数时,虽然\"9999\"能被解析为"9999",但后续的单引号与逗号组合在部分shell环境下会导致命令被错误拆分或解析,最终让psql收到语法不完整的命令。

内容的提问来源于stack exchange,提问作者Ariel Ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:01:33