
Зачем и почему?
Работая с БД часто приходится вручную писать SQL для создания history-таблиц, которые хранят «историю» о каждой записи из таблицы. То есть, если запись создана/изменена/удалена, для неё создается новая запись в таблице с окончанием «_hist» или «_history».
Задача знакомая, но крайне рутинная: для каждой таблицы нужно вручную писать SQL, проверять, чтобы все колонки были учтены, тип колонок был корректным, и не было опечаток.
Поэтому, я решил сделать небольшой плагин для DBeaver, который предоставляет удобное меню выбора колонок и событий.
После нескольких выходных дней получилась минимальная реализация, которой хочу с вами поделиться.
В данный момент реализован самый простой функционал:
-
Указать колонки, которые будут логироваться
-
Выбрать события (INSERT, UPDATE, DELETE)
-
Генерация и применение SQL для выбранной таблицы
Репозиторий проекта: GitHub — HistoryHelper
Кратко про установку
Для установки плагина нужно сделать несколько простых шагов:
-
Иметь установленный DBeaver
-
Зайти в репозиторий проекта и перейти в Release1.1.0
-
Скачать JAR файл (либо собрать из исходников. Инструкция в readme)
-
Перенести полученный JAR файл в папку
/plugins/(предпочтительнее) или/dropins/ -
Перезапустить DBeaver с флагами
-clean -clearPersistedState
После перезапуска DBeaver, можно проверить, открыв в меню Справка выбрать пункт Информация об установке (см. скриншот ниже).
Затем в панели выбрать пункт Плагины и написать название плагина «HistoryHelper» (см. скриншот ниже).
Если после всех выполненных шагов установки, в плагинах вы смогли найти HistoryHelper, значит мы можем переходить непосредственно к генерации SQL для history-таблицы.
Использование плагина
Порядок действий будет представлен вместе со скриншотами для наглядности.
1. Необходимо выбрать нужную таблицу и кликнуть правой кнопкой мыши (работает только для таблиц) (см. скриншот ниже).
2. Нужно кликнуть на «Generate History Table». У вас выпадет диалоговое окно, где вам необходимо выбрать нужные колонки и также события (см. скриншот ниже).
3.При клике на «ОК» у вас выпадет меню, в котором вы увидите сгенерированный SQL и сможете сделать действия (см. скриншот ниже):
-
Кнопка «Применить» применяет сгенерированный SQL к выбранной таблице, затем также копирует скрипт в буфер обмена (заложил функцию для проектов, использующих liquibase)
-
Кнопка «Копировать» просто копирует сгенерированный SQL в буфер обмена
-
Кнопка «Закрыть» если что‑то вас смутило, и вы не хотите использовать сгенерированный SQL
4.После применения сгенерированного SQL (и refresh в бд), вы сможете увидеть таблицу и триггеры.
Roadmap
В ближайшем будущем планирую продолжать улучшать плагин, и, пока что, ближайшие улучшения такие:
-
Доп. вариант «оптимизированное» хранение в history-таблицах. В отличии от текущей реализации, в «оптимизированном» хранении будет записывать только предпоследние состояние объекта, а не все предыдущие состояния. Необходимо для экономии ресурсов.
-
Поддержка других СУБД (MySql, Oracle и т.д.) — в данный момент реализация подходит только для PostgreSQL.
-
Локализация на английский язык.
-
Добавление ограничений на выпадающее меню: в данный момент при клике на любую папку, базу данных и т.п. — вы увидите «Generate History Table», но при нажатии будет выведено предупреждение «Выберите таблицу в навигаторе БД».
-
Добавление предупреждений при исключительных сценариях (создания history-таблицы на уже созданную history-таблицу и т.п.)
Заключение
Это мой первый опыт написания плагина для DBeaver и, вообще, первая публичная статья. Понимаю, что плагин пока еще сыроват, но в ближайшем будущем планирую довести его до ума, чтобы облегчить нашу с вами рутину.
Если заметите баги или у вас появятся идеи для улучшений — добро пожаловать в Issues.
Комментарий или звездочка на GitHub будет самой лучшей поддержкой. Не судите строго 🙂
Ссылка на репозиторий: GitHub — HistoryHelper
ссылка на оригинал статьи https://habr.com/ru/articles/944640/
Добавить комментарий