PostgreSQLで、テキストファイルを一括してインポートする方法は分かるのですが、一括してアップデート(UPDATE)する最も簡単な方法は何でしょうか?


○テーブルX
 A列 B列 C列 D列
 1  2  3  4
10 20 30 40

※A列を主キーとする


○テキストファイル
 A列 C列
 1  555
 10 888

○テキストファイル反映後のテーブルX
 A列 B列 C列 D列
 1  2  555  4
10 20 888 40


テキストファイルをテーブルXに反映するとした場合、普通にインポートするとINSERT扱いとなってしまうと思うのですが、これをUPDATEする方法と言うのはあるのでしょうか?

最悪、プログラムで1件1件UPDATE文を実行してもよいのですが、もっと賢い方法があれば教えてください。

回答の条件
  • 1人5回まで
  • 登録:2006/06/14 10:54:39
  • 終了:2006/06/17 22:30:40

回答(3件)

id:tadashi0805 No.1

tadashi0805回答回数287ベストアンサー獲得回数292006/06/14 11:11:14

ポイント35pt

MySQLですと、PostgreSQLのインポートで使うCOPYコマンドに相当する、LOAD DATAコマンドに、該当する機能はあるようですが、PostgreSQLでは見当たりませんね。

となると、テキストファイルの各行をUPDATEクエリに変換するスクリプトを作り、それを食わせて、一括処理を行うのが手っ取り早いと思います。

id:katsube

やはりその方法しか無いですか(^^;

ありがとうございました!

※念のためもうちょっとだけ受け付けておきます。

2006/06/14 11:17:52
id:saphil No.2

saphil回答回数36ベストアンサー獲得回数32006/06/14 11:37:04

ポイント10pt

一括アップデート(UPDATE)の便利なツールは無いように思います。

コマンドラインPHPで、サクッ、と作成されてはどうでしょうか。

期待はずれの回答で、済みません。

id:birdie-brain No.3

birdie-brain回答回数40ベストアンサー獲得回数42006/06/15 14:14:28

ポイント35pt

まずテーブルXとは別に、A列(主キー)、C列を持つテーブルYを作成し、そこにテキストファイルをインポートします。

次に以下のSQLクエリを実行し、テーブルXのC列をテーブルYのC列の値に変更します。

UPDATE ONLY X

SET

  C = Y.C

FROM

  X

  INNER JOIN Y ON X.A = Y.A

この方法だと、データ量が増えても手間が変わらないのと、1行ずつUPDATEするよりも実行時間が短くて済むのが利点です。

id:katsube

まだ試してませんが、こんな方法があるんですねぇ。次回の改修を行う際に導入したいと思います。

ありがとうございました!

2006/06/17 22:29:31

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません