gpt4 book ai didi

jsonb_set : how to set a number, 不是字符串,jsonb 字段中的值?

转载 作者:行者123 更新时间:2023-12-05 08:50:59 32 4
gpt4 key购买 nike

在 Postgres 中,如何在 jsonb 字段中设置数字而不是字符串值?

jsonb_set 想要一个 jsonb 值作为第三个参数,但数字不能转换为 json。示例代码:

CREATE OR REPLACE FUNCTION update_age(person jsonb)
RETURNS jsonb
LANGUAGE plpgsql AS -- language declaration required
$func$
DECLARE
age NUMERIC;
BEGIN
RAISE NOTICE 'input %', person::TEXT;
age := (person->'age')::NUMERIC + 1;
RAISE NOTICE 'new age %', age;


-- person := jsonb_set(person, '{age}', age);
-- this fails: function jsonb_set(jsonb, unknown, numeric) does not exist
-- how to set a number, not string, value in the 'age' jsonb field?

RETURN person;
END
$func$;

SELECT update_age('{"name": "John", "age": 30}');
-- desired result: {"name": "John", "age": 31}
-- not {"name": "John", "age": "31"}

最佳答案

jsonb_set() 的第三个参数需要是一个 jsonb 值。要将数字转换为正确的 jsonb 值,请使用 to_jsonb(),而不是强制转换。

person := jsonb_set(person, '{age}', to_jsonb(age)); 

language sql 函数会更有效:

CREATE OR REPLACE FUNCTION update_age(person jsonb)
RETURNS jsonb
LANGUAGE sql
AS
$func$
select jsonb_set(person, '{age}', to_jsonb((person ->> 'age'):: numeric + 1));
$func$
immutable;

关于jsonb_set : how to set a number, 不是字符串,jsonb 字段中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60813411/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com