[pgsql-jp: 32094] Re: COPYコマンドによる timestamp 型データのインポート

西尾大助 d-nishio @ ta2.so-net.ne.jp
2004年 1月 23日 (金) 09:29:43 JST


西尾です。

本田さん、ご回答ありがとうございます。
結論から書きますと、うまくいきました。

> エラーメッセージを見ると、5列目の''をtimestamp型のカラムに入れ
> ていそうだったので、ちょっと実験しました。予想通りでしたが、テー
> ブル定義とCSVファイルの定義が合っているかチェックしてみて下さい。

元になるテキストデータ
22222233,15,1,20031025 14:30,,
00012919,04,1,20031105 09:54,,

の6列目が入る予定のフィールド定義がtimestamp型です。
こちらに投稿した後もめげずに色々試した結果、
 COPY tbl_xxx FROM 'yyy.src' DELIMITERS ',' WITH NULL AS '\null';

のWITH NULL AS '\null' の部分を、WITH NULL AS '' と変更したら
うまくデータをインポートすることが出来ました。

意味を理解せず、本にあるとおりにWITH NULL AS '\null'としてしまいましたが、
timestamp型と定義されているフィールドにnull stringとして\nullを入れようとした
ことがエラーの原因だったのでしょうか。

正直、未だに他人に説明できるほどしっかり原因が理解出来ていないのですが、
COPYコマンドのnull string の指定が不適切であったために、本田さんが
おっしゃるようにテーブルのフィールド定義にそぐわないデータを入れようと
していた、というところでしょうか。

本田さんの実験でもそうでしたが、timestamp型に''を入れようとして失敗しました。
にもかかわらずnull string として''を指定したらうまくいった、
というのも解せないところです。

「実践 PostgreSQL」(O'REILLY)によるとnullはデータ型によらず全ての
列で使用可能とあったので'\null'でも良さそうに思えるのですが、
「nullと''では何が違うのか」というのはおそらくFAQだと思いますので自分で
追いかけてみます。

本田さん、ご指導ありがとうございました。
------------------------------------------------------------
西尾大助	d-nishio @ ta2-so-net.ne.jp



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