電子書籍の厳選無料作品が豊富!

PostgreSQL、外部ファイルからDBへの振り分け反映の方法

早速ですが質問させて頂きます。

『外部ファイル.txt』内容
------ここから------
A B C D E F G H I
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
B C D E F G H I A
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
------ここまで------

上記のようなスペース区切りの文字ファイルがあるとして、このファイルのデータを
英字から始まる行はtable1へ、数字から始まる行はtable2へと振り分けたいです。

現在、1つのテーブルに反映させることは以下のコマンドを使用することにより可能なのですが、
2つのテーブルに振り分ける方法は全く思い浮かびません。

1つのテーブルに反映させる方法
\COPY table1 from 'C:\\~ファイルパス~\\外部ファイル.txt' delimiters ' ' null ''

下記のようなファイル内容でもかまいません。

------ここから------
A B C D E F G H I
--------------------
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
--------------------
B C D E F G H I A
--------------------
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
------ここまで------

あるいは

------ここから------
A B C D E F G H I
--------------------
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
------ここまで------

わかる方がいらっしゃいましたらご回答いただければと思います。
また、出来ないようであれば何か参考になりそうな情報を教えていただければありがたいです。
PostreSQLのバージョンは8.2?です。
不足している情報がありましたら指摘してください。

以上です、お手数かけますがよろしくお願いいたします。

A 回答 (2件)

Windowsみたいなので、FINDSTRコマンドを使うといいと思います。



FINDSTR /B [a-zA-Z] 外部ファイル.txt | psql -c "COPY table1 FROM stdin DELIMITERS ' ' NULL ''"
FINDSTR /B [0-9] 外部ファイル.txt | psql -c "COPY table2 FROM stdin DELIMITERS ' ' NULL ''"

外部コマンドを使わないんだったら、table1にトリガを定義して英字でなければtable2に挿入するように作り込むという手もありますね。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございました。

FINDSTRコマンドですか…初めて知りました。
実はトリガーも使用したことがないため、まだまだ勉強が必要だと感じております…。

とても助かりました。ありがとうございました。

お礼日時:2010/10/23 21:16

一度全てを一つのテーブルに入れて、その後に振り分ければいいのでは。


もしくは、全てをテーブル1とテーブル2に入れて、
テーブル1は数字で始まるデータを削除、テーブル2は英字で始まるデータを削除。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございました。

なるほど、そういった考え方もあるんですね…と感心致しました。

自分1人では辿り着けない答えを頂きありがとうございました。

お礼日時:2010/10/23 21:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!