Як і в 9.Версія 2, PostgreSQL додала досить базовий тип даних JSON. Під обкладинкою типом даних JSON є текст, перевіряючи, чи, можливо, макет правильний вхід JSON, подібний до XML. Врешті-решт, команда виявила, що обсяг обробки JSON та спеціалізований пошук, необхідні в PostgreSQL, було б важко або раціонально забезпечити над текстовим типом даних. Отже, вони створили двійкове представлення типу даних JSON із повним набором операторів та методів. Ось тип даних JSONB. Тип даних JSONB - це справді універсальний двійковий макет зберігання з повною обробкою, індексуванням та можливостями пошуку. В результаті він попередньо обробляє інформацію JSON до внутрішнього макета, який має лише одне значення на ключ і ігнорує додаткові пробіли або депресію, або ви можете сказати відступ. У цьому посібнику ви дізнаєтеся, як взаємодіяти з формою даних JSONB у PostgreSQL, а також деякими зручними операторами та методами роботи з даними JSONB.
Тип даних, який вам, швидше за все, знадобиться і виберете для використання, - це JSONB, а не рання версія JSON, яка використовується лише для зворотної сумісності. Отже, відкрийте командну оболонку PostgreSQL і вкажіть імена сервера, базу даних, порт та ім’я користувача.
Приклад 01:
Ось коротка ілюстрація варіацій між двома типами даних. Ми маємо створити таблицю "Нова", один із її стовпців повинен мати тип даних "JSON", як показано нижче:
>> СТВОРИТИ ТАБЛИЦЮ Нове (ID серійний ПЕРВИННИЙ КЛЮЧ, Val JSON);
Вставте деякі значення в стовпець 'Val'.
>> ВСТАВИТИ В НОВІ (VAL) ЦІННОСТІ ('[1, 2, 3, 4]'), ('[10, 11, 12, 13]'), ('"ключ": "значення"') ;
Використання оператора '@>'
Після того, як ми спробуємо шукати записи з цілим числом у списку стовпців «зайвий», ми завжди отримуємо повідомлення про помилку, як додано нижче.
>> ВИБЕРІТЬ * З НОВОГО ДЕ Val @> '11';
Так. JSON - це просто текст і не дуже ефективний, і він не містить конфігурації оператора. Нехай зміст змінено на jsonb.
>> ЗМІНИТЬ ТАБЛИЦЮ Новий ЗМІНИТЬ СТОЛБКУ Val TYPE JSONB;
Тепер виконайте той самий запит у оболонці, і результат показує один рядок із числом 11 у своєму масиві, як зазначено нижче.
>> ВИБЕРІТЬ * З НОВОГО ДЕ Val @> '11';
Приклад 02:
Давайте складемо таблицю "Сумка", яка буде використовуватися на наших ілюстраціях, поки ми не почнемо говорити про методи та оператори, які можна використовувати для типу даних PostgreSQL JSONB. Одна з його колонок, напр.g. "Бренд" повинен мати тип даних "JSONB" наступним чином:
>> СТВОРИТИ СТОЛЬКУ сумку (ID серійний ПЕРВИННИЙ КЛЮЧ, марка JSONB НЕ НУЛЯ);
Ми будемо використовувати наступну декларацію SQL INSERT для додавання інформації до таблиці PostgreSQL 'Bag':
>> ВСТАВИТИ В ЗНАЧЕННЯ сумки (бренду) ('"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,] ');Ви бачите, що дані були додані у вигляді словника, напр.g., ключі та значення.
Елементи цієї таблиці "Сумка" можна побачити, використовуючи речення SELECT, як показано нижче:
>> ВИБЕРІТЬ * З сумки;
Використання оператора '->'
Давайте шукатимемо значення у стовпці «Бренд» за допомогою ключа «ім’я», використовуючи оператор «->» у нашому запиті. Він отримає всі записи ключа "ім'я" зі стовпця "Бренд". Результат буде показано в новому стовпці "бренд". Остаточний результат з’явиться, як додано нижче. Як бачите, у нас є три значення: 'Gucci, Allure, kidza' для ключа 'name'.
>> ВИБРАТИ Бренд -> 'назва' ЯК бренд ВІД сумки;
Використання оператора '->' з використанням речення WHERE
Давайте дістанемо всі ті рядки з таблиці "Сумка", де стовпець "Бренд" отримав значення "true" для свого ключа "продано". Запит для цього вибору такий:
>> ВИБЕРІТЬ * ВІД сумки ДЕ Бренд -> 'продано' = 'правда';Отже, запит отримав два рядки лише з таблиці "Сумка", оскільки він має лише два рядки, що мають значення "істина" для ключа "продано".
Функції PostgreSQL JSONB:
З інформацією JSONB, здається, існує безліч вбудованих методів, які можна використовувати. Давайте подивимось на них по черзі.
JSONB Кожна функція:
JSONB Кожна функція бере дані та перетворює їх у пару key_value. Розглянемо наступний запит методу jsonb_each, де ми вказали значення. Дані JSON найвищого рівня розширюються у ряд комбінацій ключ-значення в результаті. Ми отримали дві пари ключ-значення, як показано нижче.
>> ВИБЕРІТЬ jsonb_each ('"name": "Allure", "sold": "true"' :: jsonb);
Функція клавіш об'єктів JSONB:
Тепер ми розглянемо функцію Jsonb_object_keys. Ця функція бере дані, а сама відокремлює та визначає ключові значення в них. Спробуйте наведений нижче запит SELECT, в якому ми використовували метод jsonb_object_keys і надавали деякі значення. Цей метод поверне лише ключі документа JSON найвищого рівня для певних даних, як показано нижче.
>> ВИБЕРІТЬ jsonb_object_keys ('"name": "kidza", "sold": "true"' :: jsonb);
Функція шляху вилучення JSONB:
Функція JSONB Extract Path бере шлях, щоб показати значення в результаті. Спробуйте наведений нижче запит у командній оболонці, де ми вказали 'brand' як шлях до методу JSONB jsonb_extract_path. З результатів, представлених на зображенні нижче, ви можете бачити, що 'Gucci' - це повернене значення до шляху 'name'.
>> ВИБЕРІТЬ jsonb_extract_path ('"name": "Gucci", "sold": true' :: jsonb, 'name');
Досить функція JSONB:
Якщо ви хочете відобразити свої файли JSON із зручним для читання макетом, тоді найкращим варіантом є функція JSONB Pretty. Спробуйте подати запит нижче, і ви отримаєте простий результат.
>> ВИБЕРІТЬ jsonb_pretty ('"name": "Allure", "sold": false' :: jsonb);
Висновок:
Зберігаючи інформацію JSONB у базах даних PostgreSQL, ви отримуєте найкращий можливий результат: простоту та надійність бази даних NoSQL у поєднанні з перевагами реляційної бази даних. Використовуючи численні оператори та методи, ми продемонстрували, як використовувати PostgreSQL JSONB. Ви зможете працювати з даними JSONB, використовуючи наші ілюстрації для довідки.