는 지금은 "지금은 함수 유형의 JSONpostgresql에서 jsonb 유형 cloumn의 값을 변경하는 방법은 무엇입니까?
CREATE OR REPLACE FUNCTION "json_object_set_key"(
"json" json,
"key_to_set" TEXT,
"value_to_set" anyelement
)
RETURNS json
LANGUAGE sql
IMMUTABLE
STRICT
AS $function$
SELECT COALESCE(
(SELECT ('{' || string_agg(to_json("key") || ':' || "value", ',') || '}')
FROM (SELECT *
FROM json_each("json")
WHERE "key" <> "key_to_set"
UNION ALL
SELECT "key_to_set", to_json("value_to_set")) AS "fields"),
'{}'
)::json
$function$;
을 달성해야하지만 jsonb하기 위해 JSON 유형을 변경할 수 없습니다, 지금은 기능을 원하는는 jsonb 유형 cloumn의 값을 변경 PostgreSQL의 기능을 사용하려면 jsonb_object_set_key "달성 할 수있는 사람, 도와주세요, 대단히 감사합니다. 여기
t=# DROP FUNCTION jsonb_object_set_key(json,text,anyelement);
DROP FUNCTION
t=# CREATE OR REPLACE FUNCTION "jsonb_object_set_key"(
t(# "jsonb" jsonb,
t(# "key_to_set" TEXT,
t(# "value_to_set" anyelement
t(# )
t-# RETURNS jsonb
t-# LANGUAGE sql
t-# IMMUTABLE
t-# STRICT
t-# AS $function$
t$# SELECT COALESCE(
t$# (SELECT ('{' || string_agg(to_json("key") || ':' || "value", ',') || '}')
t$# FROM (SELECT *
t$# FROM jsonb_each("jsonb")
t$# WHERE "key" <> "key_to_set"
t$# UNION ALL
t$# SELECT "key_to_set", to_jsonb("value_to_set")) AS "fields"),
t$# '{}'
t$# )::jsonb
t$# $function$;
CREATE FUNCTION
가 간다 :
를 왜 사용하지 않습니다 'jsonb_set()'? https://www.postgresql.org/docs/current/static/functions-json.html –
JSON 작성시 원시 문자열 연결을 사용하지 마십시오. 그럴 이유가 없기 때문에 탈출과 룰을 인용하는 것에 대해 걱정해야합니다. 이 기능은 pl/v8로 작성된 경우 아마 더 간단 할 것입니다. – jpmc26
어떤 버전의 PostgreSQL을 사용하고 있습니까? – jpmc26