从控制台查询Postgresql

时间:2012-05-30 13:05:29

标签: regex postgresql console

我有这样的事情:

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

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

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

我认为逃避某些角色存在问题,但我无法处理它。

3 个答案:

答案 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特殊字符,如$,但简单引号中的参数不是。