PostgreSQL пропонує два типи для зберігання даних JSON: json
і jsonb
. Для реалізації ефективних механізмів запитів для цих типів даних PostgreSQL також забезпечує тип даних jsonpath, описаний у Розділі 8.14.6 .
Ці json
та jsonb
типи даних приймають майже ідентичні набори значень в якості вхідних даних. Основна практична відмінність полягає в ефективності. Тип
json
даних зберігає точну копію введеного тексту, який функції обробки повинні переробляти при кожному виконанні; в той час як jsonb
дані зберігаються у розкладеному двійковому форматі, що робить його трохи повільнішим для введення через додаткові накладні перетворення, але значно швидше обробляти, оскільки повторне повторне опитування не потрібно. jsonb
також підтримує індексацію, що може бути суттєвою перевагою.
Оскільки json
тип зберігає точну копію введеного тексту, він зберігатиме семантично-незначний пробіл між лексемами, а також порядок клавіш всередині JSON-об'єктів. Крім того, якщо об'єкт JSON у значенні містить один і той же ключ більше одного разу, всі пари ключ / значення зберігаються. (Функції обробки вважають останнє значення оперативним.)jsonb
не зберігає пробіл, не зберігає порядок клавіш об'єктів і не зберігає дублювання об'єктних ключів. Якщо у вводі вказані дублюючі ключі, зберігається лише останнє значення.
Загалом, більшість програм повинні вважати за краще зберігати дані JSON як
jsonb
вважати за , за винятком випадків, коли існують досить спеціалізовані потреби, такі як застарілі припущення щодо впорядкування ключів об'єктів.
PostgreSQL дозволяє кодувати лише один набір символів на базу даних. Тому неможливо, щоб типи JSON жорстко відповідали специфікації JSON, якщо кодування бази даних не є UTF8. Спроба безпосередньо включити символи, які не можуть бути представлені в кодуванні бази даних, не вдасться; навпаки, символи, які можуть бути представлені в кодуванні бази даних, але не в UTF8, будуть дозволені.