我有以下情况。我每两周从数据源接收 CSV 格式的数据。我将其上传到 postgres 分贝。我需要确保以下内容
postgres 中的数据不应该被删除
CSV 中的任何更新都需要在不添加新行的情况下进行
需要添加任何由唯一标识标识的新数据
换句话说,数据集之间的差异需要附加到 postgres
在今天的实现中,我使用 node-postgres 将数据流式传输到 postgres
我不知道如何实现更新
有什么想法吗?理想情况下,如果有一种方法可以创建临时表流式传输新数据并在旧表和临时表之间进行比较将会很好。
最佳答案
如果 CSV 已经有唯一 ID,并且您使用的是 PostgreSQL 9.5+,那么您可以使用 INSERT ... ON CONFLICT DO UPDATE ...
。否则,您可以创建一个带有参数(单个值或单个 ROW 参数)的 plpgsql 存储过程,这样做
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;
关于node.js - 如何在postgres中更新和插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38040070/