【发布时间】:2017-08-19 09:11:04
【问题描述】:
如果我有这张桌子
CREATE TABLE tmp (
a integer,
b integer,
c text
);
INSERT INTO tmp (a, b, c) VALUES (1, 2, 'foo');
还有这个json:
{
"a": 4,
"c": "bar"
}
键映射到列名,值是新值。
如何在不触及不在地图中的列的情况下更新tmp 表?
我想过构造一个可以在 pl/pgsql 中执行的 SQL update 语句的动态字符串,但似乎必须预先确定传递给 USING 的参数数量。但是实际的参数数量是由 map 中的 key 数量决定的,这是动态的,所以这似乎是一个死胡同。
我知道我可以在循环键时使用多个更新语句更新表,但问题是我为表设置了一个触发器,它将修改表(通过将更改的列插入另一个表),因此必须在单个 update 语句中更新列。
我想知道是否可以使用 json map 动态更新表?
【问题讨论】:
-
@klin 谢谢,但不确定它是否有效,如果我只是从地图中提取所有可能的键,在我的示例中,
(map->>'b')::integer将返回null,并且在更新语句中,不会不是用null更新b吗?
标签: database postgresql