如上所写here , 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: operator does not exist: text ->> unknown
并且引发的通知显示数据类型是文本
。
NOTICE: DATA TYPE text
我试图将 _getlocales()
返回类型更改为 jsonb
,但没有任何改变:
CREATE OR REPLACE FUNCTION nav._getlocales()
RETURNS jsonb AS
$BODY$DECLARE
_l18nJson jsonb;
...
为什么会这样?
最佳答案
@Richard Huxton 为我指明了正确的方向,我当时注意力不集中,我已经用 text
数据类型声明了 variable
。所以,我改变了:
$BODY$DECLARE
variable text;
收件人:
$BODY$DECLARE
variable json;
然后问题就解决了。
关于json - PostgreSQL。 json_object_agg() 返回文本字符串而不是 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620555/