Как и в версии 9.2, PostgreSQL добавил довольно простой тип данных JSON. Под обложкой тип данных JSON — это текст, с проверкой правильности макета, ввод JSON, аналогичный XML. В конце концов, команда обнаружила, что объем обработки JSON и специализированного поиска, необходимый в PostgreSQL, было бы трудно или рационально реализовать для текстового типа данных. Следовательно, они создали двоичное представление типа данных JSON с полным набором операторов и методов. А вот и тип данных JSONB. Тип данных JSONB действительно представляет собой универсальный макет двоичного хранения с полной обработкой, индексированием и возможностями поиска. В результате он предварительно обрабатывает информацию JSON во внутреннем макете, который имеет только одно значение для каждого ключа и игнорирует дополнительные пробелы или нажатия, или вы можете сказать отступ. В этом руководстве
Тип данных, который вам, скорее всего, потребуется и вы выберете для использования, — это JSONB, а не ранняя версия JSON, которая используется только для обратной совместимости. Итак, откройте командную оболочку PostgreSQL и укажите имена сервера, базу данных, порт и имя пользователя.
Пример 1
Вот краткая иллюстрация различий между двумя типами данных. Мы должны создать таблицу New, в которой один из столбцов должен иметь тип данных JSON, как показано ниже:
>> CREATE TABLE New(ID serial PRIMARY KEY, Val JSON);
Вставьте некоторые значения в столбец «Val».
>> INSERT INTO New(Val) VALUES (‘[1, 2, 3, 4]’), (‘[10, 11, 12, 13]’), (‘{“key”: “value”}’);
Использование оператора ’@>’
Как только мы пытаемся найти записи с целым числом в списке «дополнительных» столбцов, мы всегда получаем сообщение об ошибке, как указано ниже.
>> SELECT * FROM New WHERE Val @> ‘11’;
Да. JSON — это просто текст, он не очень эффективен и не содержит конфигурации оператора. Пусть контент поменяется на jsonb.
>> ALTER TABLE New ALTER COLUMN Val TYPE JSONB;
Теперь выполните тот же запрос в оболочке, и в результате появится одна строка с номером 11 в ее массиве, как показано ниже.
>> SELECT * FROM New WHERE Val @> ‘11’;
Пример 2
Давайте создадим таблицу «Сумка», которая будет использоваться в наших иллюстрациях, пока мы не начнем говорить о методах и операторах, используемых для типа данных PostgreSQL JSONB. Один из его столбцов, например «Бренд», должен иметь тип данных «JSONB», как показано ниже:
>> CREATE TABLE Bag(ID serial PRIMARY KEY, Brand JSONB NOT NULL);
Мы будем использовать следующее объявление SQL INSERT для добавления информации в таблицу PostgreSQL ’Bag’:
>> INSERT INTO Bag(Brand) VALUES (‘{«name»: «Gucci», «color»: [«red», «black»], «price»: 10000, «sold»: true,]}’), (‘{«name»: «Allure», «color»: [«red», «Grey»], «price»: 85000, «sold»: false,]}’), (‘{«name»: «Kidza», «color»: [«black», «white»], «price»: 75000, «sold»: true,]}’);
Вы можете видеть, что данные были добавлены в виде словаря, например, ключей и значений.
Элементы этой таблицы «Сумка» можно увидеть с помощью предложения SELECT, как показано ниже:
>> SELECT * FROM Bag;
Использование оператора ’->’
Давайте поищем значения в столбце «Бренд» по ключу «имя», используя оператор «->» в нашем запросе. Он извлечет все записи ключа «name» из столбца «Brand». Результат будет показан в новом столбце «марка». Окончательный результат будет показан ниже. Как видите, у нас есть три значения: Gucci, Allure, kidza для ключа name.
>> SELECT Brand -> ‘name’ AS brand FROM Bag;
Использование оператора ’->’ с использованием предложения WHERE
Давайте возьмем все эти строки из таблицы «Сумка», где столбец «Бренд» имеет значение «истина» для своего ключа «продано». Запрос для этого выбора выглядит следующим образом:
>> SELECT * FROM Bag WHERE Brand -> ‘sold’ = ‘true’;
Как видите, запрос получил только две строки из таблицы «Bag», потому что в нем есть только две строки со значением «true» для ключа «sold».
Функции PostgreSQL JSONB
С информацией JSONB, похоже, можно использовать множество встроенных методов. Давайте посмотрим на них по очереди.
JSONB Каждая функция
Функция JSONB Each принимает данные и преобразует их в пару key_value. Рассмотрим следующий запрос метода jsonb_each, в котором мы предоставили значения. В результате данные JSON самого высокого уровня раскрываются в серию комбинаций «ключ-значение». У нас есть две пары «ключ-значение», как показано ниже.
>> SELECT jsonb_each(‘{«name»: «Allure», «sold»: «true»}’::jsonb );
Функция ключей объекта JSONB
Теперь мы взглянем на функцию Jsonb_object_keys. Эта функция принимает данные, а сама разделяет и идентифицирует в них ключевые значения. Попробуйте выполнить приведенный ниже запрос SELECT, в котором мы использовали метод jsonb_object_keys и предоставили некоторые значения. Этот метод будет возвращать только ключи документа JSON самого высокого уровня для определенных данных, как показано ниже.
>> SELECT jsonb_object_keys(‘{«name»: «kidza», «sold»: «true»}’::jsonb );
Функция извлечения пути JSONB
Функция JSONB Extract Path принимает путь, чтобы показать значение в результате. Попробуйте выполнить приведенный ниже запрос в командной оболочке, где мы указали «бренд» в качестве пути к методу JSONB jsonb_extract_path. Из выходных данных, представленных на изображении ниже, вы можете видеть, что «Gucci» — это возвращаемое значение пути «name».
>> SELECT jsonb_extract_path(‘{«name»: «Gucci», «sold»: true}’::jsonb, ‘name’);
Функция JSONB Pretty
Если вы хотите отображать свои файлы JSON в удобном для чтения макете, то функция JSONB Pretty — лучший вариант. Попробуйте выполнить приведенный ниже запрос, и вы получите простой результат.
>> SELECT jsonb_pretty(‘{«name»: «Allure», «sold»: false}’::jsonb);
Заключение
Когда вы храните информацию JSONB в базах данных PostgreSQL, вы получаете наилучший возможный результат: простоту и надежность базы данных NoSQL в сочетании с преимуществами реляционной базы данных. Используя многочисленные операторы и методы, мы продемонстрировали, как использовать PostgreSQL JSONB. Вы сможете работать с данными JSONB, используя наши иллюстрации в качестве справочника.