#postgresql #jsonb
#postgresql #jsonb
Вопрос:
У меня есть таблица с нижеприведенным форматом.
Имя таблицы: данные
У меня есть приведенный ниже запрос для извлечения data2
jsonb.
select comment->data2 from data where id=1
Я должен получить результирующий jsonb в виде набора записей, например
Я подумал, что jsonb_to_recordset
это поможет получить ожидаемый результат, но когда я попытался выполнить приведенный ниже запрос
select * from json_to_recordset(select comment->data2 from data where id=1) as x(valueId text, valueType text);
но я получаю следующую ошибку
Query 1 ERROR: ERROR: syntax error at or near "select"
LINE 1: select * from json_to_recordset(select comment->data2...
Может кто-нибудь подсказать, что я здесь делаю не так?
Ответ №1:
Вам нужно заключить внутренний select в круглые скобки:
select *
from json_to_recordset( (select comment->data2 from data where id=1) ) as x(valueId text, valueType text);
Комментарии:
1. Ошибка исчезла, но результатом является пустая таблица. Что-нибудь еще нужно сделать?
2. Это настолько запутанно, поскольку пример, приведенный в документации , работает так, как ожидалось.
select * from jsonb_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text);
3. в то время как jsonb для моего usecase (примером в основном вопросе был sample, это ближе к реальным данным) не работает даже в самой простой форме.
select * from jsonb_to_recordset('[{"fieldId":"1","fieldType":"selection","fieldValue":"6120"},{"fieldId":"2","fieldType":"selection"},{"fieldId":"3","fieldType":"text","fieldValue":"Sameple Text"},{"fieldId":"4","fieldType":"Text","fieldValue":"project code"}]') as x(fieldId text, fieldType text, fieldValue text);
4. Хорошо, я только что понял, что это работает должным образом, если ключи полностью в нижнем регистре …. не уверен, почему это так, и если это ошибка в postgresql. Работает приведенное ниже.
select * from json_to_recordset('[{"fieldid":"1","fieldtype":"selection","fieldvalue":"6120"},{"fieldid":"2","fieldtype":"selection"},{"fieldid":"3","fieldtype":"text","fieldvalue":"Sameple Text"},{"fieldid":"4","fieldtype":"Text","fieldvalue":"project code"}]') as x(fieldid text, fieldtype text, fieldvalue text);
5. Использование «» работало для отображения имен полей как есть.
x("fieldId" text, "fieldType" text, "fieldValue" text)