Поля JSONB и строковые ключи - PullRequest
0 голосов
/ 13 января 2019

У меня есть столбец JSONB со следующим содержимым:

{"ibd": true, "member_id": "P016", "sample_participant_id": "B1"}

Если я запрашиваю значение без двойной кавычки, я получаю сообщение об ошибке:

ОШИБКА: неверный синтаксис ввода для типа json LINE 1: ... ERE sample_metadata.metadata -> 'sample_participant_id' = 'B1'

для:

WHERE sample_metadata.metadata->'sample_participant_id' = 'B1'

Но для

WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'

Работает как положено. Чего я не понимаю, так это почему мне нужна двойная кавычка. они фактическая стоимость?

Спасибо, Eden

1 Ответ

0 голосов
/ 13 января 2019
Оператор

-> для jsonb возвращает jsonb, поэтому вы не можете сравнить json со строковым литералом ('B1') или text.

WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"' 

работает, потому что элемент "B1" может быть неявно приведен к jsonb для сравнения

Вы должны использовать оператор ->> для сравнения. Возвращает text

WHERE metadata->>'sample_participant_id' = 'B1'

Демо

...