[pgsql-jp: 34097] Re: JDBC での COPY

Shinzo Matthew SAITO s-ml @ shinzo.net
2004年 10月 13日 (水) 12:19:58 JST


齊藤新三です。

宇野様、お返事ありがとうございます。

 >>ひょっとしてJDBC経由で\copyは使えないのでしょうか?もし、使えないのでしたら、
 >>こういった場合はどういった回避策があるのでしょうか。
 >
 >\copyはpsql自身が解釈実行するコマンドなのでJDBCでは実行できません。
 >内部的にはCOPY FROM stdinやCOPY TO stdoutが使われています。下記参照。
 >
 >http://www.postgresql.jp/document/pg732doc/reference/sql-copy.html
 >
 >回避策としては、次のような選択肢があると思います。
 >選択肢1: psqlを呼び出して\copyで処理させる
 >選択肢2: psqlの\copyを真似た、COPY FROM stdinを使う処理を作成する

現在、選択肢2の方向で処理しているのですが、これもうまくいきません。手順は以下 
のようなものです。
Java上で、以下のようなString sqlを作成します(テーブルのカラム数は3コとします)。

COPY table_name FROM STDIN;\n
1\tv1\tw1\n
2\tv2\tw2\n
…
\\.

次に、
Statement#executeUpdate(sql);
とすると、
エラーが派生します。エラー内容は以下の通りです。

org.postgresql.util.PSQLException: ERROR: syntax error at or near "1"

ちなみに、String sqlを一度ファイルに書き出して、それを

psql -U username < できたファイル名

で発行したところ、無事COPYできてしまいます。

JDBC経由でCOPY STDINの正しい記述方法をご存じでしたら、お教えいただけたら幸い 
です。

よろしくお願いします。


☆----------------☆
Shinzo Matthew SAITO  齊藤 新三
  E-mail mailto:s-ml @ shinzo.net





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