如何在不解释文件的情况下使用文件内容更新列值?
How can I update column values with the content of a file without interpreting it?
我需要使用文本文件的内容在行与特定 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
returns下面的错误
ERROR: syntax error at or near "{"
LINE 1: ...{//...
^
我想将文件 $scriptName.js
的内容视为纯文本,并避免对其进行任何解释。
你应该引用变量:
UPDATE table SET scriptColumn=:'script' WHERE ...
这会导致变量的内容作为字符串文字正确转义。
我找到了解决我的问题的方法,尽管我不知道它为什么有效。
我把它留在这里是希望它对其他人有用,或者比我更有知识的人能够解释为什么它现在有效。
简而言之,将变量设置为 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
我之前试过 returns 出现以下错误:
unterminated quoted string
ERROR: syntax error at or near "//"
LINE 1: // dummy text blahblah
感谢所有帮助过的人!
我需要使用文本文件的内容在行与特定 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
returns下面的错误
ERROR: syntax error at or near "{"
LINE 1: ...{//...
^
我想将文件 $scriptName.js
的内容视为纯文本,并避免对其进行任何解释。
你应该引用变量:
UPDATE table SET scriptColumn=:'script' WHERE ...
这会导致变量的内容作为字符串文字正确转义。
我找到了解决我的问题的方法,尽管我不知道它为什么有效。 我把它留在这里是希望它对其他人有用,或者比我更有知识的人能够解释为什么它现在有效。
简而言之,将变量设置为 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
我之前试过 returns 出现以下错误:
unterminated quoted string
ERROR: syntax error at or near "//"
LINE 1: // dummy text blahblah
感谢所有帮助过的人!