HistoryHelper — плагин для DBeaver, который генерирует history-таблицы и триггеры за пару кликов

от автора

Зачем и почему?

Работая с БД часто приходится вручную писать SQL для создания history-таблиц, которые хранят «историю» о каждой записи из таблицы. То есть, если запись создана/изменена/удалена, для неё создается новая запись в таблице с окончанием «_hist» или «_history».

Задача знакомая, но крайне рутинная: для каждой таблицы нужно вручную писать SQL, проверять, чтобы все колонки были учтены, тип колонок был корректным, и не было опечаток.

Поэтому, я решил сделать небольшой плагин для DBeaver, который предоставляет удобное меню выбора колонок и событий.

После нескольких выходных дней получилась минимальная реализация, которой хочу с вами поделиться.

В данный момент реализован самый простой функционал:

  1. Указать колонки, которые будут логироваться

  2. Выбрать события (INSERT, UPDATE, DELETE)

  3. Генерация и применение SQL для выбранной таблицы

Репозиторий проекта: GitHub — HistoryHelper

Кратко про установку

Для установки плагина нужно сделать несколько простых шагов:

  1. Иметь установленный DBeaver

  2. Зайти в репозиторий проекта и перейти в Release1.1.0

  3. Скачать JAR файл (либо собрать из исходников. Инструкция в readme)

  4. Перенести полученный JAR файл в папку /plugins/ (предпочтительнее) или /dropins/

  5. Перезапустить DBeaver с флагами -clean -clearPersistedState

После перезапуска DBeaver, можно проверить, открыв в меню Справка выбрать пункт Информация об установке (см. скриншот ниже).

Скриншот: перейти по пути Справка -> Информация об установке

Скриншот: перейти по пути Справка -> Информация об установке

Затем в панели выбрать пункт Плагины и написать название плагина «HistoryHelper» (см. скриншот ниже).

Скриншот: Плагины - ввести название плагина, для проверки корректности установки

Скриншот: Плагины — ввести название плагина, для проверки корректности установки

Если после всех выполненных шагов установки, в плагинах вы смогли найти HistoryHelper, значит мы можем переходить непосредственно к генерации SQL для history-таблицы.

Использование плагина

Порядок действий будет представлен вместе со скриншотами для наглядности.

1. Необходимо выбрать нужную таблицу и кликнуть правой кнопкой мыши (работает только для таблиц) (см. скриншот ниже).

Скриншот: выбор таблицы

Скриншот: выбор таблицы

2. Нужно кликнуть на «Generate History Table». У вас выпадет диалоговое окно, где вам необходимо выбрать нужные колонки и также события (см. скриншот ниже).

Скриншот: диалоговое окно для выбора нужных колонок и событий (триггеров)

Скриншот: диалоговое окно для выбора нужных колонок и событий (триггеров)

3.При клике на «ОК» у вас выпадет меню, в котором вы увидите сгенерированный SQL и сможете сделать действия (см. скриншот ниже):

  1. Кнопка «Применить» применяет сгенерированный SQL к выбранной таблице, затем также копирует скрипт в буфер обмена (заложил функцию для проектов, использующих liquibase)

  2. Кнопка «Копировать» просто копирует сгенерированный SQL в буфер обмена

  3. Кнопка «Закрыть» если что‑то вас смутило, и вы не хотите использовать сгенерированный SQL

Скриншот: сгенерированный SQL скрипт.

Скриншот: сгенерированный SQL скрипт.

4.После применения сгенерированного SQL (и refresh в бд), вы сможете увидеть таблицу и триггеры.

Скриншот: результат работы плагина.

Скриншот: результат работы плагина.

Roadmap

В ближайшем будущем планирую продолжать улучшать плагин, и, пока что, ближайшие улучшения такие:

  1. Доп. вариант «оптимизированное» хранение в history-таблицах. В отличии от текущей реализации, в «оптимизированном» хранении будет записывать только предпоследние состояние объекта, а не все предыдущие состояния. Необходимо для экономии ресурсов.

  2. Поддержка других СУБД (MySql, Oracle и т.д.) — в данный момент реализация подходит только для PostgreSQL.

  3. Локализация на английский язык.

  4. Добавление ограничений на выпадающее меню: в данный момент при клике на любую папку, базу данных и т.п. — вы увидите «Generate History Table», но при нажатии будет выведено предупреждение «Выберите таблицу в навигаторе БД».

  5. Добавление предупреждений при исключительных сценариях (создания history-таблицы на уже созданную history-таблицу и т.п.)

Заключение

Это мой первый опыт написания плагина для DBeaver и, вообще, первая публичная статья. Понимаю, что плагин пока еще сыроват, но в ближайшем будущем планирую довести его до ума, чтобы облегчить нашу с вами рутину.

Если заметите баги или у вас появятся идеи для улучшений — добро пожаловать в Issues.

Комментарий или звездочка на GitHub будет самой лучшей поддержкой. Не судите строго 🙂

Ссылка на репозиторий: GitHub — HistoryHelper


ссылка на оригинал статьи https://habr.com/ru/articles/944640/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *