[pgpool-general-jp: 1569] pgpool がバックエンドに出すクエリのエスケープ文字列構文について
GOTO, Daisuke
gotoh @ m-design.com
2018年 8月 15日 (水) 18:23:41 JST
後藤と申します
pgpoolがバックエンドに出すクエリのエスケープ文字列構文について質問です。
環境は
CentOS Linux release 7.4.1708 (Core)
pgpool-II-pg96-3.6.8-1pgdg.rhel7.x86_64
postgresql96-9.6.8-1PGDG.rhel7.x86_64
です。
postgresql.conf には
standard_conforming_strings = off
escape_string_warning = on
が指定されています。
pgpoolはレプリケーションモードで使用しています。
pgpool.conf は
replication_mode = on
load_balance_mode = on
master_slave_mode = off
replicate_select = off
となっています。
サーバのロケールは ja_JP.UTF-8 でデータベースも UTF8 で作成していますが、
クライアントプログラムには sjis 環境なものもあり、
その場合は接続毎に
SET CLIENT_ENCODING TO 'SJIS'
を発行しています。
sjis のクライアントでは \x5C「\」と\x27「'」を含む文字がある場合は
エスケープを行いかつエスケープ文字列構文としてリテラルの先頭に E をつけて
「E'代表\者'」のようにしてクエリを作成しているのですが、
これが INSERT 文の場合 pgpool を経由するとバックエンドには E が欠落して
「'代表\者'」としてクエリが発行されてしまい、
「WARNING: 文字列リテラル内で非標準的なエスケープが使用されました」
の警告が出てしまいます。
(1)これは想定通りの動作なのでしょうか。
(2)エスケープ文字列構文の E を欠落させないようにする方法はありますでしょうか。
以上、もし分かる方がいらっしゃいましたらご回答をお願いいたします。
--
後藤 大輔<gotoh @ m-design.com>
株式会社エム・ディー・シー
〒212-0012 川崎市幸区中幸町3丁目2
Tel. 044-555-3185 Fax. 044-555-5700
pgpool-general-jp メーリングリストの案内