[pgsql-jp: 37081] Re: COPY コマンドによるDATE型インポート時のエラー
M.Oho
oho @ software.sanix.jp
2006年 5月 22日 (月) 20:52:35 JST
お世話になっております。大穂です。
池内様、ご助言ありがとうございます。
> copy to で書き出した結果を copy from で読み込める
というのを手がかりにいろいろと試してみたところ、
"a","2006/05/22"
"b",""
↓
a,2006/05/22
b,
のように取込元のCSVファイルをダブルクォーテーション(")
で括らないように変換してCOPYコマンドを発行すればインポート
できることが分かりました。
ただし、以下のようなテーブルがあった時に
Table "public.test"
Column | Type | Modifiers
--------+--------------------------+-----------
id | character(1) |
name | character varying(50) |
time | date |
このようなデータをインポートしようとすれば
"a","あああ","2006/05/22"
"b","いいい,ううう",""
~~~~~~~~~~~~~
変換時、下記のようになってしまい
a,あああ,2006/05/22
b,いいい,ううう,
~~~~~~ ~~~~~~
正常にインポートできませんでした。
(文字列中のカンマを区切り文字とみなしてしまうため)
そこで、【""】となっている部分だけを削除するように
変換してインポートするようにしましたところうまくい
きました。
現時点ではこの方法で開発を進めていこうと思っており
ますが、こんな方法で良いのかという不安も少々ありま
す。(正攻法ではないような。。。)
また、何かいいアイディアがあればご教授お願い致します。
以上です。
> 池内と申します。
>
> 直接の解答では無いですが、こちらで実験した結果です。
> copy to で書き出した結果を copy from で読み込めるので、それが手がかりに
> ならないでしょうか?
>
> PostgreSQL 8.0.2 on Linux(Vine 3.1/Kernel2.6.11.8)
>
> test=# \d test
> Table "public.test"
> Column | Type | Modifiers
> --------+--------------+-----------
> id | character(1) |
> time | date |
>
> test=# insert into test values ('b',NULL);
> INSERT 1514273 1
> test=# select * from test;
> id | time
> ----+------------
> a | 2006-05-22
> b |
> (2 rows)
>
> test=# copy test to '/tmp/doya.txt' using delimiters ','
> with CSV QUOTE AS '"';
> COPY
>
> test=# copy test from '/tmp/doya.txt' using delimiters ','
> with CSV QUOTE AS '"' ;
> COPY
>
> > お世話になります。
> > 大穂と申します。
> >
> > COPYコマンドによりCSVデータをインポートしようとしております。
> > Date型の項目にNULL値をインポートしようとした際、以下のような
> > エラーが発生します。
> >
> > ERROR: invalid input syntax for type date: ""
> > CONTEXT: COPY test, line 2, column time: ""
>
> --
>
pgsql-jp メーリングリストの案内