postgresql - 如何在 docker postgres 命令中转义引号
问题描述
我正在运行以下命令(重命名了一些变量):
docker exec docker_name sh -c 'psql dbname -U joeadmin -c "update table set field='really_longstringwithabunf3493829#@#@#@#@#=';"'
当我运行它时,它会抛出以下错误:
ERROR: syntax error at or near ";"
LINE 1: ...longstringwithabunf3493829#@#@#@#@#=;
^
我怎样才能转义或保留单引号,这样才能正常工作。此外,如果这只是一种可怕的处理方式,我愿意接受其他建议。用例是在将数据导出之前对 docker 容器上的数据库进行更改。
解决方案
使用 Docker 处理字符串有时会有点难看。在您的情况下,我建议先使用双引号,然后使用以下命令转义内部双引号\
:
docker exec docker_name sh -c "psql dbname -U joeadmin -c \"update table set field='really_longstringwithabunf3493829#@#@#@#@#=';\""
一个更干净的选择是创建一个环境变量:
STR="really_longstringwithabunf3493829#@#@#@#@#="
docker exec docker_name sh -c "psql dbname -U joeadmin -c \"update table set field='${STR}';\""
请记住,字符串插值发生在主机操作系统中,而不是容器中(除非您使用\${STR}
更简洁的方法是创建一个文件,然后将其复制到容器中:
echo "update table set field='really_longstringwithabunf3493829#@#@#@#@#=';" > ~/myfile.txt
docker cp ~/myfile.txt docker_name:/tmp
docker exec docker_name sh -c "psql dbname -U joeadmin -f /tmp/myfile.txt"
推荐阅读
- linkedin - 从 Linkedin 帖子中获取正确的 ID 以检索共享
- python - 如何从 python 脚本激活虚拟环境并在其中执行进一步的指令?
- r - 使用 mutate 中的滞后与 dplyr 进行滞后返回
- php - 如何使用 laravel 8 获取 mysql 记录 created_at 时间戳之间的持续时间
- javascript - 为选择/下拉列表创建默认值,并且可以手动再次选择默认值 - ReactJs
- typescript - 当您不想使用 rest 运算符时,正确使用函数“arguments”内置关键字
- reactjs - 如何测试采用 setState 的函数
- python - 如何将 X 和 Y 从 (300, 1000,50) 重塑为 (300000, 50)?
- javascript - 我如何能够将输出四舍五入为整数?
- path - Djikstra 的最短路径实现中的奇怪错误