当行与某个WHERE子句匹配时,我需要使用文本文件的内容来更新列中的值。
文件的内容是JavaScript代码,因此它可能包含单引号,双引号,斜杠和反斜杠-在我脑海中,它可能包含其他特殊字符。 文件的内容无法修改。 这必须通过psql完成,因为更新是使用bash脚本自动进行的。
使用以下命令-其中scriptName
是先前声明的bash变量-
psql -U postgres db<<EOF
\set script $(cat $scriptName.js))
UPDATE table SET scriptColumn=:script WHERE nameColumn='$scriptName';
EOF
返回以下错误
ERROR: syntax error at or near "{"
LINE 1: ...{//...
^
我想将文件$scriptName.js
的内容视为纯文本,并避免对其进行任何解释。
答案 0 :(得分:0)
您应该引用变量:
UPDATE table SET scriptColumn=:'script' WHERE ...
这会使变量的内容正确地作为字符串文字转义。
答案 1 :(得分:0)
即使我不知道它为什么起作用,我也找到了解决问题的方法。 我将其留在此处,希望它可能对其他人有用,或者比我更有知识的人将能够解释为什么它现在有效。
简而言之,将变量设置为psql参数可以达到目的:
psql -U postgres db -v script="$(cat $scriptName.js)"<<EOF
UPDATE table SET scriptColumn=:'script' WHERE nameColumn='$scriptName'
EOF
不确定这与
有何不同psql -U postgres db <<EOF
\set script "$(cat $scriptName.js)"
UPDATE table SET scriptColumn=:'script' WHERE nameColumn='$scriptName'
EOF
我之前尝试过并返回以下错误:
unterminated quoted string
ERROR: syntax error at or near "//"
LINE 1: // dummy text blahblah
感谢所有提供帮助的人!