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ライクなシェルを想定すると-c、複雑なマルチレベルの引用符を使用してクエリを渡す代わりに、ヒアドキュメント構文を使用して標準入力で元の形式で渡すことができます。

$ 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'\\\[(.*)\\\]$', '');

$記号をエスケープしてみましたが、まったく役に立ちませんでした。1つの"\"は、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 に答える