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