如何在postgres中更新和插入数据

时间:2016-06-26 15:28:58

标签: node.js postgresql

我有以下情况。我每两周以CSV格式从数据源接收数据。我上传到postgres dB。我需要确保以下

  1. 不应删除postgres中的数据

  2. CSV中的任何更新都需要在不添加新行的情况下继续进行

  3. 任何标记为uinque ID的新数据都需要添加

  4. 换句话说,数据集之间的差异需要附加到postgres

    在今天的实现中,我使用node-postgres将数据流式传输到postgres

    我不知道如何实施更新

    有什么想法吗?理想情况下,如果有一种方法来创建临时表流,新数据和旧表和临时表之间的差异将是好的。

1 个答案:

答案 0 :(得分:0)

如果CSV已经具有唯一ID,并且您正在使用PostgreSQL 9.5+,那么您可以使用INSERT ... ON CONFLICT DO UPDATE ...。否则你可以创建一个带参数的plpgsql存储过程(单个值或单个ROW参数),这样做

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;

并为CSV上的每一行执行该功能。您可以先将CSV导入临时表并执行

SELECT the_above_function(f.id, f.value, ...)
FROM csv_temp_table f;