在下面的代码示例中,postgresql(9.4)应该将复合类型的局部变量转换为json字符串。显然,postgresql处理一个变量,其值为null值,而不是类似的null值。
在我的应用程序中,我有嵌套的复合类型,并希望在复合类型的变量为null时检索null。
我希望你们能在这里帮助我。
CREATE TYPE mytype AS (
id SMALLINT,
name TEXT
);
DO $$
DECLARE
l_var mytype;
BEGIN
l_var := NULL;
RAISE INFO '%',to_json(NULL::mytype);
RAISE INFO '%',to_json(l_var) ;
END $$;
--Output
INFO: <NULL>
INFO: {"id":null,"name":null}
答案 0 :(得分:3)
是的,PostgreSQL区分ROW与空字段和NULL。修复应该不难 - 您应该使用CASE表达式:
postgres=# DO $$
DECLARE
l_var mytype;
BEGIN
l_var := NULL;
RAISE INFO '%',to_json(NULL::mytype);
RAISE INFO '%',to_json(CASE WHEN l_var IS NULL THEN NULL ELSE l_var END) ;
END $$;
INFO: <NULL>
INFO: <NULL>
DO
答案 1 :(得分:0)
不幸的是,解决方案并不适用于我,因为它在另一种类型中使用,我不能应用所提出的案例结构。
但是在与后端开发人员交谈之后,即使这些领域没有任何价值,他们也总能获得完整的json结构。所以从语义角度来看,postgres工作正常。