Postgres JSON NULL未激活默认参数



在PostgreSQL 14中,JSON字符串中未指定的参数会干扰函数调用中的参数默认值,尽管看起来是NULL。

我相信tst:=j::json->gt;'tst'正在用伪null值填充tst。

我错过了一些简单的东西吗?我曾想过在testNull中合并到声明的变量中,但这感觉很混乱,我觉得必须有一种更优雅的方法。

create or replace function testNull(test varchar, tst int default 1) returns int
language plpgsql as $$
declare
begin 

raise notice '%', tst;

return tst;
end; $$;
----------------------------
create or replace function testNulljson(j varchar) returns int
language plpgsql as $$
declare
test varchar;
tst int;
begin 

raise notice '%', tst;

test := j::json->>'test';
tst := j::json->>'tst';
return testNull(test, tst);
end; $$;
----------------------------
select testNull('testValue');  -- returns 1
select testNulljson('{"test":"testValue"}'); -- returns null

https://www.postgresql.org/docs/current/ddl-default.html

可以为列分配默认值。创建新行时并且没有为某些列指定值,这些列将用它们各自的默认值填充。

有一个区别:a.select * from public.testNull('testValue', NULL);
b。select * from public.testNull('testValue' );
a返回NULL,b返回1

当您调用select testNulljson('{"test":"testValue"}');时,您最终调用的是select * from public.testNull('testValue', NULL);,它将返回Null。

当您调用select testNull('testValue'); -- returns 1时,您没有提到tst输入参数,它将被1替换,因此返回1。

最新更新