node.js - 如何在postgres中更新和插入数据

标签 node.js postgresql

我有以下情况。我每两周从数据源接收 CSV 格式的数据。我将其上传到 postgres 分贝。我需要确保以下内容

  1. postgres 中的数据不应该被删除

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

  3. 需要添加任何由唯一标识标识的新数据

换句话说,数据集之间的差异需要附加到 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/

相关文章:

postgresql - 如何检查多线串是否真的是多线串?

node.js - 服务器无法找到与 App SID 关联的 TwiML 应用程序

node.js - Puppet:提供程序 npm 在此主机上不起作用

node.js - 如何跨多个测试目录运行 jasmine 规范

javascript - XMLHttpRequest 模块未定义/未找到

SQL:如何在单独的表中更新重复项?

javascript - 如何使用异步函数作为 Array.filter() 的比较函数?

sql - SQL中如何获取某个用户每次对话的最新消息?

macos - 在 MacOS X 上不匹配 pg_dump

python - many2one 字段不显示字段值