2012-04-23 16:35:07 PDTWARNING: 文字 117 の文字列リテラルでの \\ の非標準使用 2012-04-23 16:35:07 PDTHINT: バックスラッシュにはエスケープ文字列構文を使用します (例: E'\\')。
2 に答える
最近の PostgreSQL では、文字列は標準に準拠していると想定されています。これは、デフォルトではエスケープがないことを意味します。これを制御するための設定があります:
standard_conforming_strings
-- 9.1 以降のデフォルトは on です。escape_string_warning
-- また、デフォルトでオンになっています。
これは、 のような文字列リテラル'a\nb'
が 4 つの単純な文字として解析されることを意味します。エスケープで解析したい場合は、E'a\nb'
予想される 3 文字として解析する構文があります。適切な説明については、http://www.postgresql.org/docs/current/interactive/runtime-config-compatible.htmlを参照してください。
(PostgreSQL 9.1 以降を実行している場合)standard_conforming_strings = off
おそらく、エスケープを使用して記述された従来のクエリを正しく実行できるようにするためです。ただし、非推奨の構文を使用していることを警告しているため、警告は引き続き有効になっています。
E
適切な解決策は、警告を取り除きたい場合は、プレフィックスを使用するようにすべてのクエリを修正することです。もちろん、エスケープが意図的であると仮定すると、そうでない場合、設定standard_conforming_strings = on
は正しいです。
abc\def
このようにエスケープする必要がある場合など、エスケープされていないバックスラッシュを含む値を使用して挿入/更新していますabc\\def
。
入力データを調べてデバッグし、問題のテキストを見つけます