我正在執行一個函式來比較 JSON,然后僅在表(觸發器)上插入差異。當所有暫存器都沒有參考時,該函式可以完美運行。所以我想知道如何逃避這些可能會出現的參考:
CREATE OR REPLACE FUNCTION public.fnc_compare_jsonb(old_reg jsonb, new_reg jsonb)
RETURNS jsonb
LANGUAGE plpgsql
IMMUTABLE STRICT
AS $function$
declare
keys record;
jsonb_return jsonb = '{}'::jsonb;
begin
for keys in
select *
from jsonb_object_keys($1)
loop
if $1 -> keys.jsonb_object_keys <> $2 -> keys.jsonb_object_keys then
jsonb_return = jsonb_return || format('{"%s": "%s"}', keys.jsonb_object_keys, $2 ->> keys.jsonb_object_keys)::jsonb;
end if;
end loop;
return jsonb_return;
end
$function$
;
錯誤發生在線上:
jsonb_return = jsonb_return || format('{"%s": "%s"}', keys.jsonb_object_keys, $2 ->> keys.jsonb_object_keys)::jsonb;
SQL Error [22P02]: ERROR: invalid input syntax for type json
Detail: Token "@" is invalid.
Where: JSON data, line 1: {"email": "test2"@...
PL/pgSQL function ecidadao.fnc_compare_jsonb(jsonb,jsonb) line 11 at assignment
uj5u.com熱心網友回復:
您的格式陳述句會創建一些文本,而不是有效的 json。使用json 函式執行此操作:
SELECT json_build_object('foo'::text,'text with double quotes " "'::text);
結果:{"foo" : "帶有雙引號的文本 " ""}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380941.html
標籤:json PostgreSQL的 逃跑 plpgsql
上一篇:計數為空
