Является ли Postgres необязательным повторным вводом ключа JSON из столбца jsonb в текст снова? - PullRequest
1 голос
/ 31 марта 2020

Я создал view в postgres, используя следующий запрос

    SELECT
        JSON_BUILD_OBJECT(
            'street', t.data->'address'->>'street',
            'area', t.data->'address'->>'area',
            'displayLocation', t.data->'address'->>'display_location',
            'postalCode', t.data->'address'->>'postal_code'
        ) AS address
    FROM true_humans t;

После создания представления я использовал команду \d+ true_humans_view в моем psql, чтобы увидеть запрос представления , Вот результат команды \d+,

      SELECT
        json_build_object(
                   'street', (t.data -> 'address'::text) ->> 'street'::text, 
                   'area', (t.data -> 'address'::text) ->> 'area'::text, 
                   'displayLocation', (t.data -> 'address'::text) ->> 'display_location'::text,                                                          
                    'postalCode', (t.data -> 'address'::text) ->> 'postal_code'::text
        ) AS address
    FROM true_humans t;

Почему Postgres делает 'address' :: text этой типизацией? Пожалуйста, помогите мне понять поведение Postgres.

1 Ответ

0 голосов
/ 19 апреля 2020

Обобщающий ответ на этот вопрос из комментариев:

Как вы думаете, какой тип буквального «адреса»? Как вы думаете, к какому типу относится буквально «2020-03-31»? Если вы хотите уточнить, какой тип должен быть у каждого, какой удобный способ указать это?

Кавычки не могут быть обоими типами одновременно, не так ли? Его тип фактически является «неизвестной кавычкой», и он будет интерпретироваться как определенный тип в зависимости от контекста. В этом случае вы знаете, что хотите текст, как и PostgreSQL. Об этом прямо говорят.

Спасибо, Ричард Хакстон.

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