PostgreSQL. json_object_agg()返回文本字符串而不是JSON对象

4

此处所述,json_object_agg(name, value)的返回类型为json。同时,如果我从存储过程中返回json_object_agg()的返回值:

CREATE OR REPLACE FUNCTION _getlocales()

RETURNS json AS
$BODY$DECLARE
    var json;
BEGIN
    select into var json_object_agg("key", "values") from table;
    RETURN var;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

在另一个函数中调用它:

variable    =   _getlocales();    
RAISE NOTICE 'DATA TYPE %', pg_typeof(variable);
SELECT variable->>'property'

我无法获取JSON对象字段。我遇到了以下错误:

ERROR:运算符不存在:text -> unknown

并且提醒显示数据类型是text

NOTICE: 数据类型为text

我尝试将_getlocales()的返回类型更改为jsonb,但没有任何变化:
CREATE OR REPLACE FUNCTION nav._getlocales()
RETURNS jsonb AS
$BODY$DECLARE
    _l18nJson   jsonb;
...

为什么会发生这种情况?

2
请展示更多相关代码。关键是,我们需要看到“变量”的定义。 - Richard Huxton
哦,有了你的帮助,我已经想出来了。它被声明为文本。不理解我怎么错过了,谢谢!您可以将其发布为答案,我将很乐意接受它! - Alexandr Lazarev
1个回答

1

@Richard Huxton 指出了正确的方向,我不够注意并且声明了一个 text 数据类型的 variable。所以,我已经修改为:

$BODY$DECLARE
    variable text;

收件人:

$BODY$DECLARE
    variable json;

问题已经解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接