【问题标题】:PostgreSQL. json_object_agg() returns text string instead of json objectPostgreSQL。 json_object_agg() 返回文本字符串而不是 json 对象
【发布时间】:2016-02-25 07:06:04
【问题描述】:

正如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 对象字段。我遇到了:

错误:运算符不存在:文本 ->> 未知

并引发通知显示数据类型为text

注意:数据类型文本

我尝试将_getlocales() 返回类型更改为jsonb,但没有任何改变:

CREATE OR REPLACE FUNCTION nav._getlocales()
RETURNS jsonb AS
$BODY$DECLARE
    _l18nJson   jsonb;
...

为什么会这样?

【问题讨论】:

  • 请显示更多有问题的代码。至关重要的是,我们需要了解“变量”的定义
  • 哦,在你的帮助下我已经弄明白了。它被声明为文本。无法理解我是如何错过它的,谢谢!您可以将其发布为答案,我很乐意接受!

标签: json postgresql postgresql-json


【解决方案1】:

@Richard Huxton 为我指明了正确的方向,我不专心,我已经用 text 数据类型声明了 variable。所以,我改变了:

$BODY$DECLARE
    variable text;

收件人:

$BODY$DECLARE
    variable json;

问题就解决了。

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多