使用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
相关产品推荐
相关产品推荐

