- 締切済み
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がうまくいきません。 どうぞ宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- copymaster
- ベストアンサー率81% (83/102)
なさりたい事とズレているかもしれませんが、 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なりで書けばよいかと思います。
補足
回答ありがとうございます。 今回、COPYを使ってテーブルにデータを入れるのは、とりあえずCSVファイルの内容を早くテーブルに取り込みたいのが目的でして、取り込んだ後にそのテーブルから処理を行おうと考えています。