Skip to content

Latest commit

 

History

History
99 lines (86 loc) · 6.16 KB

File metadata and controls

99 lines (86 loc) · 6.16 KB

✅ Валидатор схемы БД PostgreSQL

Цели

  1. Минимизация рисков нестабильности работы БД в процессе накатывания миграций БД в производственной среде
  2. Поддержание заданного уровня качества БД

Описание работы

Валидатор представляет из себя функцию в БД PostgreSQL 12+.

Запуск:

select db_validate_v2(
    --'{has_pk_uk,has_not_redundant_index,has_index_for_fk}', --some checks
    null, --all checks

    null, --schemas_ignore_regexp
    '{unused,migration,test}', --schemas_ignore

    '(?<![a-z\d])(te?mp|test|unused|backups?|deleted)(?![a-z\d])', --tables_ignore_regexp
    null --tables_ignore
);

Функция проверяет текущую БД на наличие проблем. Никаких данных не возвращается. Если проблемы не найдены, функция успешно завершает работу, иначе возвращается ошибка (исключение в терминах PL/PgSQL): текст ошибки и рекомендации по исправлению.

Рекомендуется вызвать функцию в одной транзакции до и после накатывания миграции на тестовой БД. Если до применения миграции ошибок нет, а после есть, значит причина в миграции БД.

Проверки

В какой версии сделано Код проверки Название проверки Назначение (обоснование) проверки
1 v1 has_pk_uk

Наличие первичного или уникального индекса в таблице

Первичный индекс (PK) позволяет

  • однозначно идентифицировать запись таблицы БД
  • получить очень быстрый доступ к записи

Уникальный индекс (UK) позволяет исключить дубликаты

Без PK или UK невозможно сделать логическую репликацию.

2 v1 has_not_redundant_index

Отсутствие избыточных индексов в таблице

Если есть составной индекс на поля col1 и col2 (именно в такой последовательности), то отдельный индекс на поле col1 не нужен, он избыточный. Лишние индексы занимают место на диске и замедляют DML запросы.

3 v2 has_index_for_fk

Наличие индексов для ограничений внешних ключей в таблице

Без индексов на ограничения внешних ключей (FK) могут работать медленно элементарные запросы типа DELETE FROM {table} WHERE id=<id> из-за ссылающихся на {table} таблиц по FK без индекса.
4 v2 has_table_comment Наличие описания для таблицы На этапе проектирования описание помогает лучше понять назначение таблицы и на сколько удачно она названа исходя из описания. В дальнейшем тандем названия и описания упрощают понимание и поддержку кода. Порог входа для новых IT специалистов (разработчиков, тестировщиков, бизнес- и системных аналитиков) уменьшается. Проверка на наличие непустого значения в COMMENT ON TABLE {table}
5 v2 has_column_comment Наличие описания для колонки На этапе проектирования описание помогает лучше понять назначение колонки и на сколько удачно она названа исходя из описания. В дальнейшем тандем названия и описания упрощают понимание и поддержку кода. Порог входа для новых IT специалистов (разработчиков, тестировщиков, бизнес- и системных аналитиков) уменьшается. Проверка на наличие непустого значения в COMMENT ON TABLE {table}.{column}