PostgreSQL. json_object_agg() возвращает текстовую строку вместо объекта json
Как написано здесь, 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;
...
Почему это происходит?
1 ответ
Решение
@Richard Huxton указал мне верное направление, я был невнимателен и объявил variable
с text
тип данных. Итак, я изменился:
$BODY$DECLARE
variable text;
Для того, чтобы:
$BODY$DECLARE
variable json;
И проблема была решена.