PostgreSQLでエスケープ文字を利用する場合の注意

以下の例のように「nonstandard use of \\ in a string literal」とかログに出ててビビッた。

SELECT position
       (
        'C:\\\\aaa/bbb/sample.txt' in '\\\\'
       )
FROM hoge  message: nonstandard use of \\ in a string literal


下記、引用の通り、エスケープ文字を利用している場合は、「直前にE」と付与することで問題なくなるようです。

PostgreSQLでは、また、"エスケープ"文字定数を受け付けます。これは標準SQLの拡張です。エスケープ文字定数は、開始単一引用符の直前にE(大文字でも小文字でもかまいません)を記述することで指定されます。例えばE'foo'です。

http://www.postgresql.jp/document/8.4/html/sql-syntax-lexical.html

上記の例を修正する場合は、以下のように修正します。

'C:\\\\aaa/bbb/sample.txt' in '\\\\'
 ↓
E'C:\\\\aaa/bbb/sample.txt' in E'\\\\'


但し、製品などの場合、自分で修正することが難しいかもしれません。その場合は、下記のように設定ファイルを修正する方法もあります。*1

escape_string_warning = on
 ↓
escape_string_warning = off