В чем разница между `- >>` и `->` в Postgres SQL?

В чем разница между ->> и -> в SQL?

В этом потоке (Проверить, существует ли поле в столбце json type postgresql), ответчик в основном рекомендует использовать

json->'attribute' is not null

вместо <

json->>'attribute' is not null

Зачем использовать одну стрелку вместо двойной стрелки? В моем ограниченном опыте оба делают то же самое.

Ответ 1

-> возвращает json(b) и ->> возвращает text:

with t (jo, ja) as (values
    ('{"a":"b"}'::jsonb,('[1,2]')::jsonb)
)
select
    pg_typeof(jo -> 'a'), pg_typeof(jo ->> 'a'),
    pg_typeof(ja -> 1), pg_typeof(ja ->> 1)
from t
;
 pg_typeof | pg_typeof | pg_typeof | pg_typeof 
-----------+-----------+-----------+-----------
 jsonb     | text      | jsonb     | text

Ответ 2

PostgreSQL предоставляет два собственных оператора -> и ->>, которые помогут вам запрашивать данные JSON.

Оператор -> возвращает поле объекта JSON как JSON. Оператор ->> возвращает поле объекта JSON в виде текста.

В следующем запросе используется оператор -> для получения всех клиентов в виде JSON:

введите описание изображения здесь

В следующем запросе используется оператор ->>, чтобы получить всех клиентов в виде текста:

введите описание изображения здесь

Вы можете увидеть более подробную информацию по ссылке ниже http://www.postgresqltutorial.com/postgresql-json/