2016-02-25 4 views
3

Как написано here, json_object_agg(name, value) Тип возврата: json. В то же время, если я возвращать значение, возвращаемое json_object_agg() из хранимой процедуры:PostgreSQL. json_object_agg() возвращает текстовую строку вместо объекта json

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

И поднятый уведомление показывает, что тип данных text.

NOTICE: DATA TYPE text

Я попытался изменить _getlocales() тип возврата к jsonb, но ничего не изменилось:

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

Почему это происходит?

+2

Пожалуйста, смотрите больше кода. Существенно, нам нужно будет увидеть определение «переменная» –

+0

О, я выяснил это с вашей помощью. Он был объявлен как текст. Не могу понять, как я пропустил это, спасибо! Вы можете опубликовать его в качестве ответа, я буду рад принять его! –

ответ

1

@ Рихард Хукстон указал мне правильное направление, я был невнимательным, и я объявил variable с типом данных text. Итак, я изменил:

$BODY$DECLARE 
    variable text; 

To:

$BODY$DECLARE 
    variable json; 

И вопрос был решен.

Смежные вопросы