Кажется, у меня проблема со столбцом «данные» в моей таблице «Commercial_action_agreements». Предположительно это тип JSONB.
=# \d+ commercial_action_agreements
Column | Type |
----------------------+--------------------------+
data | jsonb |
Хотя это выглядит странно, поскольку он помечен в кавычках вместо того, чтобы иметь его ключ и значение в кавычках:
=# SELECT data FROM commercial_action_agreements;
data
--------------------
"{tire_count: 3}"
"{tire_count: 3}"
"{tire_count: 34}"
"{tire_count: 50}"
"{tire_count: 47}"
"{tire_count: 45}"
"{tire_count: 15}"
"{tire_count: 28}"
"{tire_count: 30}"
"{tire_count: 3}"
"{tire_count: 3}"
"{tire_count: 3}"
(12 rows)
Это "{ tyre_count: 3} "вместо {" tyre_count ": 3} или {" tyre_count ":" 3 "}
Если я попытаюсь извлечь значение 'tyre_count', я получу нулевые значения:
=# SELECT data -> 'tire_count' AS tire_count FROM commercial_action_agreements;
tire_count
------------
(12 rows)
=# SELECT data -> 'tire_count' AS tire_count FROM commercial_action_agreements WHERE data->'tire_count' IS NOT NULL;
tire_count
------------
(0 rows)
, и если я попытаюсь извлечь ключи, я обнаружу, что это скаляр (который, как SQL newb ie, я не знаю и не могу понять, что это значит):
=# SELECT DISTINCT jsonb_object_keys(data::JSONB) FROM commercial_action_agreements;
ERROR: cannot call jsonb_object_keys on a scalar
Этот JSONB будет иметь более одной пары ключ / значение, поэтому быстрые и грязные решения, такие как вырезание подстроки «tyre_count:», не подходят.
Я не знаю, почему каждый экземпляр «данных» является скаляром, и если он является скаляром, это само по себе является проблемой. Данные создаются и (обычно) доступны через API Crystal / Lucky и запросы в почтальоне, поэтому я думаю, что вся проблема «данные являются скалярными» могут быть чем-то вызваны чем-то в сериализаторе, но это не так (я считаю) суть проблемы.
Я sh, чтобы найти способ извлечения ключей и значений из этого JSONB.