我有以下情况。我每两周以CSV格式从数据源接收数据。我上传到postgres dB。我需要确保以下
不应删除postgres中的数据
CSV中的任何更新都需要在不添加新行的情况下继续进行
任何标记为uinque ID的新数据都需要添加
换句话说,数据集之间的差异需要附加到postgres
在今天的实现中,我使用node-postgres将数据流式传输到postgres
我不知道如何实施更新
有什么想法吗?理想情况下,如果有一种方法来创建临时表流,新数据和旧表和临时表之间的差异将是好的。
答案 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;