
Зачем и почему?
Работая с БД часто приходится вручную писать 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