• 締切済み

COPYコマンドの対象テーブルのフォールドを配列にした場合

COPYコマンドを利用し、CSVファイルデータをテーブルへ登録しようと思うのですが、CSVファイルの1行のデータ数が300あります。300のフィールドを作成せずにフィールドを配列にしたみましたが、うまくいきません。配列では不可能でしょうか。 CSVファイルの1行のデータ数が多い場合は、何かよい方法がありますでしょうか。 CSVファイル No,Data1,Data2,....Data300 テーブル CREATE TABLE Data_log ( No int4, IN_data float8[] ) WITHOUT OIDS; SQL文 COPY Data_log from '" & ファイルパス & "' WITH DELIMITER ',';" 上の様に作成しましたが、SQLがうまくいきません。 どうぞ宜しくお願い致します。

みんなの回答

回答No.1

なさりたい事とズレているかもしれませんが、 PostgreSQLのようなRDBに入れるからには、 まずきちんと正規化された形にして入れる かと思います。 (通常、300もフィールドがあるのは、正規化 されていないと思われます。) CSVをそのままの形で突っ込むのではなく、 No,Data1,Data2,....Data300 というデータであれば、 line_no|data_no|in_data -----+-----+-------    1|   1| aaaaa    1|   2| bbbbb    1|   3| ccccc    1|   4| ddddd    1|   5| xxxxx : <略> :    1|  299| yyyyy    1|  300| zzzzz    2|   1| abc111    2|   2| def222    2|   3| abc111 : というような形に変換してから入れると思います。 CSVをExcel等で編集してこの形にしてから突っ込むか、 プログラムでCSVから一行ずつ読んで、 改行とカンマ区切りごとにループをネストして INSERTするようなプログラムをコマンドラインの JavaなりPHPなりで書けばよいかと思います。

muttu
質問者

補足

回答ありがとうございます。 今回、COPYを使ってテーブルにデータを入れるのは、とりあえずCSVファイルの内容を早くテーブルに取り込みたいのが目的でして、取り込んだ後にそのテーブルから処理を行おうと考えています。

関連するQ&A