Проверяет понимание возможностей PostgreSQL для работы с неструктурированными данными и выбора подходящего типа хранения.
PostgreSQL традиционно считается реляционной СУБД, но она давно вышла за рамки строгих таблиц. Начиная с версии 9.2 появился тип JSON, а с 9.4 — JSONB, который хранит документ в разобранном бинарном виде. Это позволяет складывать в одну колонку произвольные структуры: вложенные объекты, массивы, разнородные поля — без заранее заданной схемы.
@>, ?, ->>, обновление отдельных ключей.CREATE TABLE events (
id serial PRIMARY KEY,
payload jsonb NOT NULL
);
INSERT INTO events (payload) VALUES
('{"type":"click","user":{"id":42,"name":"Ann"},"tags":["a","b"]}');
-- Индекс для быстрого поиска по ключам
CREATE INDEX idx_events_payload ON events USING GIN (payload);
-- Поиск по вложенному полю
SELECT payload->'user'->>'name' AS name
FROM events
WHERE payload @> '{"type":"click"}';
Гибридный подход особенно полезен, когда часть полей стабильна и реляционна, а часть — динамическая. Например, у заказа есть id, сумма и дата (обычные колонки), а метаданные платёжного шлюза лежат в JSONB. Так вы получаете транзакции, JOIN и целостность Postgres плюс гибкость документной модели.
Ограничения тоже есть: JSONB не проверяет схему, занимает больше места, чем нормализованные колонки, и не подходит для частых обновлений больших документов. Для тяжёлой аналитики по вложенным полям иногда выгоднее вынести их в отдельные колонки.
Итог: PostgreSQL вполне способен заменить отдельную NoSQL-базу для неструктурированных данных, если объёмы умеренные и нужны транзакции и SQL. Для огромных документных нагрузок с шардированием всё же стоит смотреть в сторону специализированных решений.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Node.js Developer в телеграм