2016-06-26 8 views
1

以下のような状況があります。私は2週間ごとにCSV形式でデータソースからデータを受け取ります。私はそれをpostgres dBにアップロードします。私はpostgresの中に、以下のポストグルでデータを更新して挿入する方法

  1. データはCSVで

  2. すべての更新プログラムは、新しい行

  3. uinque IDでマークされた新しいデータを追加することなく引き継がする必要は削除すべきではないことを確認する必要があります換言すれば、データセット間の差分は、Postgresのに追加する必要が

を追加する必要が

私はpostgresの

にデータをストリーミングするために、ノードのpostgresを使用しています今日の実装で

私はアップデート

任意のアイデアを実装する方法を知りませんか?理想的には、一時的なテーブルストリームを作成する方法がある場合は、新しいデータと古いテーブルと一時テーブルの間の差分を実行すると良いでしょう。

答えて

0

CSVに固有のIDが既にあり、PostgreSQL 9.5以降を使用している場合は、INSERT ... ON CONFLICT DO UPDATE ...を使用できます。そうしないと、それは

UPDATE table SET 
    value = param_value 
    ... 
WHERE ID = param_id; 

IF NOT found THEN 
    INSERT INTO table (ID, value, ...) 
    VALUES (param_id, param_value, ...); 
END IF; 

を行いパラメータ(個々の値または単一行のパラメータのいずれか)とplpgsqlがストアドプロシージャを作成して、CSV上の行ごとにその機能を実行することができます。まずCSVを一時テーブルにインポートして実行することができます

SELECT the_above_function(f.id, f.value, ...) 
FROM csv_temp_table f; 
関連する問題