[pgsql-jp: 26100] Re: \i によるインポートで文字列リテラルのエスケープが正常に解釈されない

chi Chihiro_Kuraya @ virtems.com
2002年 5月 23日 (木) 23:19:47 JST


こんにちは、倉谷です。


> 以下の4つの INSERT 文だけをファイルに入れてみました。
> 上の2つの INSERT 文が先ほどエラーの起きた箇所です。
> (同じく下の2つの INSERT 文もエラーが出ていました。)
> 
> ---------------------------------------------------------------------------
> INSERT INTO project_bill ( project, id, content, amount, unit, unit_price )
> VALUES ( '2000-10-01-01',1,'DTP page layout at \\850/page(hoge)',10,'ページ',850);
> INSERT INTO project_bill ( project, id, content, amount, unit, unit_price )
> VALUES ( '2000-10-01-01',2,'DTP page layout at \\800/page(foo)',200,'ページ',800);
> INSERT INTO project_bill ( project, id, content, amount, unit, unit_price )
> VALUES ( '2000-10-01-01',3,'Grafic editing at \\600/item',16,'個',600);
> INSERT INTO project_bill ( project, id, content, amount, unit, unit_price )
> VALUES ( '2000-10-01-01',4,'ABF-conversion at \\1,000/item',2,'個',1000);
> ---------------------------------------------------------------------------
> 
> これを \i で読み込むと、上の3つの INSERT 文は正常に実行されたのですが、
> 今度は最後の INSERT 文でエラーになり、以下のようなメッセージが出ました。
> 
> psql:test.sql:8: invalid command \
> psql:test.sql:9: ERROR:  Unterminated quoted string
> 
> うーん、おかしいです。
> どうも PostgreSQL のバグのような気がしますが。。。

いろいろ調べてみましたら、以下のような記事がありました。
ftp://ftp.sra.co.jp/pub/cmd/postgres/7.1.3/patches/README_jp.txt
-----------------------------------------------------------------------
PostgreSQL 7.1.3 パッチについて		石井達夫
...
2002/05/01: ascii.patch.gz を追加
...
3. ascii.patch.gz

   データベースエンコーディングとクライアントエンコーディングが異ると
   きにPostgreSQLはエンコーディングの自動変換を行いますが,変換が不能
   の場合には「(16進数)」の形に置き換えます.このとき,バグのために変
   換不能の該当文字だけでなく,直後の1バイトを変換不能文字と見なして変
   換してしまいます.その結果,たとえば変換不能文字の直後の\'(バックス
   ラッシュ+シングルクォート)を単独の'(シングルクォート)に変換してしま
   い,任意のSQL文を実行可能にするセキュリティホールが生じる可能性があ
   ります.なお,この問題はデータベースエンコーディングがSQL_ASCIIのと
   きにのみ発生します.
-----------------------------------------------------------------------

実は、今回のデータベースはエンコーディングが Unicode なのですよ。
詳しいことは忘れましたが、たしか、Unicode と日本語文字コードとの間の
変換において半角円マークは、不可逆変換になるとか聞いたことがあります。

うーんと、でも、上のバグの説明にしたがっても、
エラー現象の整合的な説明ができないなー。

とすると、これと似た、別のバグなのだろうか。
もしかしたら、このパッチで治るかもしれないかも。。。


---
倉谷智尋 <Chihiro_Kuraya @ virtems.com>



pgsql-jp メーリングリストの案内