-- Иерархия пространств имен
CREATE SCHEMA billing;
CREATE SCHEMA imaging;
-- Приоритет разрешения имен:
SET search_path TO billing, public;
-- Квалифицированное обращение:
SELECT * FROM billing.subscribers;
users нужна и в модуле биллинга, и в модуле авторизации).hr, finance, audit).search_path.Специальный объект СУБД, генерирующий монотонно растущие числа в разделяемой памяти (Shared Memory).
CREATE SEQUENCE billing.receipt_seq
START WITH 100000
INCREMENT BY 1
MINVALUE 100000
MAXVALUE 999999999
CACHE 20;
-- Получение уникального значения:
SELECT nextval('billing.receipt_seq');
SEQUENCE не откатывается назад! Если транзакция вызвала nextval() и затем завершилась оператором ROLLBACK, выданное число теряется навсегда.
CREATE TYPE imaging.modality_type
AS ENUM ('CT', 'MRI', 'XRAY', 'US');
CREATE TYPE logistics.geo_point AS (
lat NUMERIC(9, 6),
lon NUMERIC(9, 6)
);
pg_views.-- Защита персональных данных через VIEW
CREATE VIEW imaging.v_patient_public AS
SELECT
patient_id,
study_id,
'PATIENT_' || patient_id AS anon_code,
study_date,
modality
FROM imaging.patients;
Результат сложного аналитического запроса однократно рассчитывается и сохраняется на диске в виде таблицы.
REFRESH.CREATE MATERIALIZED VIEW billing.mv_debt_report AS
SELECT
district_id,
sum(accrual_amount) AS total_accrued,
sum(paid_amount) AS total_paid
FROM billing.accruals
GROUP BY district_id;
-- Создание индекса по витрине:
CREATE INDEX idx_mv_debt_district
ON billing.mv_debt_report(district_id);
| Критерий | Обычное VIEW | MATERIALIZED VIEW |
|---|---|---|
| Место на диске | 0 байт (только текст запроса) | Физические страницы данных + индексы |
| Свежесть данных | 100% реальное время | Статичный снимок на момент REFRESH |
| Собственные индексы | Не поддерживаются | Поддерживаются в полном объеме |
| Скорость чтения | Зависит от базового запроса | Мгновенно (O(log N)) |
| Основная роль | Безопасность и сокрытие полей | Тяжелая аналитика, витрины данных (OLAP) |
Базовый оператор REFRESH MATERIALIZED VIEW matview_name; накладывает замок AccessExclusiveLock — на время обновления чтение витрины полностью блокируется!
UNIQUE INDEX по полям витрины!CREATE UNIQUE INDEX idx_mv_pk
ON billing.mv_debt_report(district_id);
REFRESH MATERIALIZED VIEW CONCURRENTLY
billing.mv_debt_report;
REVOKE ALL).GRANT SELECT ON view_name).-- Создание роли с логином
CREATE ROLE doctor_read WITH LOGIN PASSWORD '***';
-- Разрешение входа в схему:
GRANT USAGE ON SCHEMA imaging TO doctor_read;
-- Доступ только к безопасному представлению:
GRANT SELECT ON imaging.v_patient_public
TO doctor_read;
Нативный Open Source инструмент для PostgreSQL. Поддержка всех типов объектов, наглядные ERD, идеальный чистый DDL.
Универсальный инструмент аналитика и разработчика. Визуализация ERD на лету, редактор объектов схемы и связей.
Промышленная среда моделирования, визуального конструирования запросов и версионирования схем.
Корпоративный эталон сквозного моделирования: от концептуальной модели к физической структуре СУБД.
Визуальная ERD-модель → DDL-скрипт (schema.sql)
CREATE SCHEMA, CREATE TABLE, CREATE VIEW.Работающая БД → Визуальная ERD-диаграмма
Разделяйте подсистемы по схемам (billing, logistics, auth). Не используйте схему public как свалку таблиц.
Используйте VIEW для сокрытия чувствительных данных и упрощения JOIN. Используйте MATERIALIZED VIEW для тяжелых отчетов.
Генерируйте первичные ключи через SEQUENCE. Не бойтесь пропусков номеров — это плата за параллелизм и производительность.
Robert'); DROP TABLE Students;--.