невозможно извлечь данные из скаляра / JSONB - PullRequest
1 голос
/ 03 августа 2020

Кажется, у меня проблема со столбцом «данные» в моей таблице «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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...