【发布时间】:2016-08-31 17:57:42
【问题描述】:
关于UPDATE multiple rows from multiple params in nodejs/pg,我需要运行以下命令:
update portfolios p
set votes = s.votes
from unnest(array[(5, 1), (15, 1), (25, 2)]) s (votes int, id int)
where p.id = s.id
我在unnest中的数组是$1,如下:
update portfolios p
set votes = s.votes
from unnest($1) s (votes int, id int)
where p.id = s.id
但是,我的数组最初由对象组成,如:
[{votes: 5, id: 1}, {votes: 15, id: 1}, {votes: 25, id: 2}]
我尝试将其转换为:
my_array = my_array.map(function(e) { return tuple(e.votes, e.id); });
但这失败了。
我需要使用 pg 和 Client.query 使用的值更正兼容数组。
如何转换我的对象数组以尊重 javascript 和 postgresql unnest?
【问题讨论】:
-
你为什么需要让这个单一的
update语句发生;为什么不运行多个update语句? -
我正在使用带有 pg 的 nodejs,它不支持多个查询,而无需在所有语句之间进行手动循环 - 显然。如果有其他解决方案可用,我会全力以赴。
-
它是如何失败的?有没有办法输出正在馈送到 Postgresql 的查询?
-
如果无法从驱动程序中获取输出,则可以在 Postgresql 日志中看到它。
-
如果我保持 [{...}, {...}...] 格式,我会从 PostgreSQL 收到错误 42804 "enforce_generic_type_consistency"。
标签: javascript arrays node.js postgresql