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

chi Chihiro_Kuraya @ virtems.com
2002年 5月 23日 (木) 21:53:01 JST


こんにちは、倉谷です。

お返事ありがとうございます。


> こんにちは。石田です。
> 
> On Thu, May 23, 2002 at 05:46:09PM +0900, chi wrote:
> > こんにちは、倉谷と申します。
> (略)
> > このように INSERT 文が1万行ほど書かれたテキストファイルがあります。
> > このファイルを psql 上から \i コマンドによってインポートを行うと、
> > 次のようなエラーが起きます。
> > 
> > psql:project-data.sql:8438: invalid command \
> > psql:project-data.sql:8440: ERROR:  parser: parse error at or near "2000"
> > 
> > 該当する 8437行目以下は次のようになっております。
> > -----------------------------------------------------------------------
> > INSERT INTO project_bill ( project, id, content, amount, unit, unit_price )
> > VALUES ( '2000-10-01-01',1,'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,'Page layout at \\800/page(foo)',200,'ページ',800);
> > -----------------------------------------------------------------------
> > 
> > どうも、文字列リテラル中の \\ が円マークとして解釈されていないようなのですが、
> > どうしてなのでしょうかね。PostgreSQL の仕様どおりの書き方をしているはずなのですが。。。
> 
> 本当に \\ マークのところが問題なのかという気もするので、
> 上記の 4 行だけのテキストを \i してみる、とか
> それでエラーなら、フィールドを 1 つずつ書き換えてみる、とかして
> 絞りこんでみるのもよいかもしれません。

そうですね。
試してみましょう。

以下の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 のバグのような気がしますが。。。


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



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