Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

15.10.2024

PostgreSQL та JSON

PostgreSQL, окрім того, що є вірним вибором бази даних SQL, цілком може також бути вірним вибором бази NoSQL. Принаймні, якщо від NoSQL вам потрібна можливість зберігати JSON, а не здатність до масштабування або всі інші відзнаки, за які зазвичай беруть NoSQL.

Або, практичніше, може в вашій таблиці в PostgreSQL є потреба зберігати прапорці та налаштування, для яких неекономічно створювати окремі стовпчики. Може, це перемикач, який буде увімкнено лише для декількох записів. Може, набір атрибутів без визначеної заздалегідь схеми.

В такому випадку корисно знати, що в PG можна скористатися вбудованими типами json/jsonb. Це дає купу переваг: зміст поля буде гарантовано коректним JSON, за ним можна спеціальними операторами робити пошук. Навіть будувати індекси за окремими атрибутами, включаючи унікальні, та використовувати в умовах JOIN.

Різниця між цими типами в тому, що json це практично text із додатковими перевірками, а jsonb зберігає зміст в оптимізованому для читання двійковому форматі, але трохи більше витрачає на запис.

Єдине, чого PostgreSQL не вміє робити, так це перевіряти зміст поля — окрім його синтаксису. Ну, та ще унікальності атрибута за індексом. Для перевірки за схемою є доповнення pg_jsonschema - його можна додати як перевірку CHECK.