Bash脚本执行带QUOTE参数的PostgreSQL \copy命令如何处理引号转义
可行的3种实现方案
方案1:Bash单引号拼接(适合短命令,保持单引号包裹习惯)
Bash中单引号包裹的字符串内部无法直接转义单引号,可以用'\''的拼接结构实现单引号插入,正确写法如下:
psql -c '\copy raw.ap1_1 from file.csv with csv header quote as '\''"'\'';'
命令拆解:单引号内的内容正常写,需要插入单引号时,先闭合当前单引号',写转义后的单引号\',再重新打开单引号继续写后续内容,最终psql接收到的命令完全符合PostgreSQL语法要求。
方案2:双引号包裹整段命令(转义逻辑更直观)
如果用双引号包裹-c的参数,只需要转义内部的双引号和反斜杠即可:
psql -c "\\copy raw.ap1_1 from file.csv with csv header quote as '\"';"
注意双引号环境下\本身需要转义,所以\copy要写为\\copy。
方案3:用Here Document传命令(零转义成本,最推荐)
如果命令较长或者转义逻辑太复杂,直接用Here Document把命令传给psql,不需要处理任何嵌套引号:
psql <<EOF \copy raw.ap1_1 from file.csv with csv header quote as '"'; EOF
你之前的写法错误原因是混用了HTML实体",Bash和PostgreSQL都无法识别该符号,同时没有正确处理Bash的引号嵌套规则,才会触发语法报错。
内容的提问来源于stack exchange,提问作者UlisesQLL
相关产品推荐
相关产品推荐

