Выбор значений внутри массива в jsonb - PullRequest
1 голос
/ 12 июля 2020

У меня есть следующая таблица

CREATE TABLE country (
    id      INTEGER NOT NULL PRIMARY KEY ,
    name        VARCHAR(50),
    extra_info  JSONB
);
 
INSERT INTO country(id,extra_info)
VALUES (1, '{ "name" : "France", "population" : "65000000", "flag_colours": ["red", "blue","white"]}');
 
INSERT INTO country(id,extra_info)
VALUES (2, '{ "name": "Spain", "population" : "47000000", "borders": ["Portugal", "France"] }');

SELECT extra_info->>'name' as Name, extra_info->>'population' as Population
FROM country

Я хотел бы выбрать идентификатор и дополнительную информацию

SELECT id,extra_info->>'population' as Population,extra_info->'flag_colours'->>1 as colors
FROM country 

Этот запрос показывает только идентификатор, население, но значение flag_colors равно нулю.

Я также хотел бы использовать flag_colors в условии

SELECT extra_info->>'population' as Population FROM country where extra_info->'flag_colours'->>0 

я получаю эту ошибку

ERROR:  argument of WHERE must be type boolean, not type text
LINE 1: ...o->>'population' as Population FROM country where extra_info...
                                                             ^
SQL state: 42804
Character: 67

Как исправить два запроса?

1 Ответ

1 голос
/ 12 июля 2020

Написал свой запрос таким образом

SELECT *
FROM country
WHERE (extra_info -> 'flag_colours') ? 'red' and (extra_info -> 'flag_colours') ? 'white'

Большое спасибо alt-f4

обновленный ответ { ссылка }

...