我有这样的事情:
UPDATE table SET column=REGEXP_REPLACE(column, E'\[(.*)\]$', '');
此查询一切正常,但是当我想从控制台执行此操作时存在问题,如下所示:
psql -U postgres db -c "UPDATE table SET column=REGEXP_REPLACE(column, E'\\[(.*)\\]$', '');"
我认为转义某些字符存在问题,但我无法处理。
我有这样的事情:
UPDATE table SET column=REGEXP_REPLACE(column, E'\[(.*)\]$', '');
此查询一切正常,但是当我想从控制台执行此操作时存在问题,如下所示:
psql -U postgres db -c "UPDATE table SET column=REGEXP_REPLACE(column, E'\\[(.*)\\]$', '');"
我认为转义某些字符存在问题,但我无法处理。
假设一个类 Unix 的 shell,作为通过-c
复杂的多级引用传递查询的替代方法,它可以使用heredoc语法在标准输入中以其原始形式传递:
$ psql db << EOF
UPDATE table SET column=REGEXP_REPLACE(column, E'\[(.*)\]$', '');
EOF
我发现正确的方法是:
UPDATE table SET column=REGEXP_REPLACE(column, E'\\\[(.*)\\\]$', '');
我尝试转义 $ 符号,但这根本没有帮助。我知道一个“\”是 bash 用来逃避另一个需要 db 来逃避下一个的。
我认为问题出在$
. 尝试:
postgres db -c "UPDATE table SET column=REGEXP_REPLACE(column, E'\\[(.*)\\]\$', '');"
评估在双引号内传递的参数。这意味着它可以识别 bash 特殊字符,例如$
,但不是简单引号内的参数。