2

我有这样的事情:

UPDATE table SET column=REGEXP_REPLACE(column, E'\[(.*)\]$', '');

此查询一切正常,但是当我想从控制台执行此操作时存在问题,如下所示:

psql -U postgres db -c "UPDATE table SET column=REGEXP_REPLACE(column, E'\\[(.*)\\]$', '');"

我认为转义某些字符存在问题,但我无法处理。

4

3 回答 3

2

假设一个类 Unix 的 shell,作为通过-c复杂的多级引用传递查询的替代方法,它可以使用heredoc语法在标准输入中以其原始形式传递:

$ psql db << EOF
UPDATE table SET column=REGEXP_REPLACE(column, E'\[(.*)\]$', '');
EOF
于 2012-05-30T20:58:24.200 回答
1

我发现正确的方法是:

UPDATE table SET column=REGEXP_REPLACE(column, E'\\\[(.*)\\\]$', '');

我尝试转义 $ 符号,但这根本没有帮助。我知道一个“\”是 bash 用来逃避另一个需要 db 来逃避下一个的。

于 2012-05-30T13:18:33.800 回答
0

我认为问题出在$. 尝试:

postgres db -c "UPDATE table SET column=REGEXP_REPLACE(column, E'\\[(.*)\\]\$', '');"

评估在双引号内传递的参数。这意味着它可以识别 bash 特殊字符,例如$,但不是简单引号内的参数。

于 2012-05-30T13:14:02.507 回答