На днях состоялся релиз OpenIDE Pro. Эта версия позиционируется как универсальная IDE для большинства современных стеков разработки. Я уже год пользуюсь OpenIDE в связке с Amplicode вместо IntelliJ Idea. И в целом это закрывает мои потребности по разработке на стеке Java, Kotlin и Spring.

Конечно, сейчас мы уже не пишем код вручную, а всё больше с помощью кодинговых агентов. Но mcp-инструменты, предоставляемые IDE, дают неплохой буст тем же агентам. Вместо прямого парсинга кода на уровне файловой системы они быстро получают основную информацию о проекте от IDE, которая умеет парсить код без расходования драгоценных токенов. К тому же что-то быстро посмотреть или найти определённый класс удобнее в IDE.

Однако мне по-прежнему недостаёт нормального клиента для БД с тем уровнем эргономики и функционала, который есть в DataGrip. В частности, для postgres. Ситуация осложняется ещё тем, что у DataGrip не существует бесплатной версии. Даже если оставить за скобками цену, нет простого способа легально купить лицензию на DataGrip. Особенно для корпоративной разработки в России.

Поэтому меня заинтересовал новый плагин DB Client, который идёт в составе OpenIDE. Давайте посмотрим, может ли он уже на текущий момент стать достойной альтернативой платному DataGrip? Я не предъявляю каких-то узкоспециальных требований к таким инструментам. В основном требуется писать и оптимизировать sql-запросы, просматривать структуру таблиц и диаграмму связей между ними, просматривать актуальный DDL, выполнять мелкие правки данных “на лету”, а также делать импорт и экспорт данных в различных форматах. Давайте по этим пунктам и пройдёмся.

Создание подключения к БД

При подключении новой БД ничего экстраординарного. Уже сейчас мы можем подключить не только Postgres, но и MySQL, SQLite, Oracle и ClickHouse. Нас встречает стандартное окно, где вводим хост, порт, название базы данных, логин и пароль.

Создание подключения к базе данных
Создание подключения к базе данных

Поскольку у большинства из нас микросервисная архитектура, велика вероятность, что несколько разных проектов используют одну и ту же БД. И хорошо, что один раз подключив БД в одном проекте, её не надо будет заново подключать во всех остальных. Подключения в окне DB Client шарятся на все проекты.

На мой взгляд, тут ещё не хватает альтернативы в виде ввода строки подключения целиком. Предположим, в проекте у вас уже есть строка подключения, которая начинается с jdbc:postgresql://... В DataGrip можно вставить такую строку и не придётся вводить отдельно хост, порт и имя базы данных.

Ещё один момент, связанный с юзабилити, заключается в модальности этого окна. То есть пока я не закрою окно настроек подключения, я не могу смотреть другие файлы. Это неудобно, т.к. строка подключения может находиться в этом же проекте.

Просмотр и редактирование данных

Выбрав интересующую нас таблицы, мы нажимаем F4 и можем видеть её содержимое. Постраничный вывод, возможность выбора размера страницы (от 50 до 1000 строк) и даже фильтры WHERE и ORDER BY - всё это нам хорошо знакомо по DataGrip. Для больших таблиц возможность отобразить всё записи целиком отсутствует - но вряд ли это имеет практический смысл.

Просмотр данных таблицы
Просмотр данных таблицы

Также вы можете редактировать данные прямо в таблице. Понятно, что в реальных системах так лучше не делать, но иногда бывает удобно.

Однако я не могу сейчас выбрать несколько строк одновременно. Редактирование возможно только по одной строке. Хотя в DataGrip я могу выбрать сразу несколько строк и тут же нажать на “-” для их удаления.

Просмотр структуры таблицы

Помимо того, что вы можете посмотреть состав полей таблицы в древовидной структуре DB Client, бывает удобно также посмотреть DDL этой таблицы в виде SQL. Так более комплексно можно выяснить необходимую информацию о тех или иных полях, индексах и ограничениях.

Просмотр структуры таблиц
Просмотр структуры таблиц

Для этого выбираем Generate DDL на интересующей нас таблице. Никакого хоткея на это действие по умолчанию нет, хотя я считаю, что он не помешал бы.

DDL таблицы, сгенерированный в DB Client
DDL таблицы, сгенерированный в DB Client

В DataGrip тоже нет хоткея, но есть кнопка DDL в тулбаре в окне просмотра данных таблицы.

Ещё нет возможности создавать и редактировать структуру таблицы через UI. В DataGrip такой функционал имеется - там я могу создавать любые объекты БД не написав ни строчки SQL. С другой стороны, я не считаю этот функционал критичным, ведь в реальных системах никто не создаёт таблицы руками, а пишет скрипты миграции вроде Liquibase или Flyway.

Просмотр связей между таблицами

Если вас интересует не отдельная таблица, а схема связей между ними, то можно выбрать Show Schema Diagram - и DB Client наглядно отобразит все таблицы в текущей схеме и связи между ними через внешние ключи.

Схема связей между таблицами
Схема связей между таблицами

Данный функционал примерно похож на аналогичный из DataGrip.

Выполнение SQL запросов

DB Client не был бы клиентом, если бы не позволял выполнять любые sql-запросы напрямую. Выбираем New Console, в которой можно задать по умолчанию базу данных и схему, в контексте которых будем выполнять запрос. В написании sql нам будет помогать автокомплит.

Autocomplete в DB Client
Autocomplete в DB Client

Тут всё понятно: результат любого select можем не только просматривать, но и экспортировать в CSV. А вот по поводу DML есть вопросы. Если я напишу delete from my_table без условий, то DB Client лишь подсветит потенциально опасную операцию. Тогда как DataGrip в этом случае будет требовать явного подтверждения в inline-диалоге. Я считаю, что “защита от дурака” должна быть.

Просмотр плана запроса

Ещё одной типовой задачей при работе с БД является оптимизиация запроса. Когда наш запрос тормозит, бывает полезно посмотреть его стоимость (cost). Само по себе значение нам ничего не скажет, но позволит принять решение о необходимости его дальнейшей оптимизации. План запроса позволяет убедиться, что индексы используются планировщиком и при этом не происходит полного сканирования таблицы.

Оптимизация запроса с помощью Explain Plan
Оптимизация запроса с помощью Explain Plan

Для просмотра плана запроса нам поможет инструмент Explain Plan. Просто выделяем интересующий нас sql-запрос и в контекстном меню выбираем Explain - Explain Plan. В древовидной структуре мы наглядно увидим процесс обработки запроса.

Этот функционал похож на аналогичный из DataGrip.

Экспорт и импорт данных

Тут мы подходим к самому интересному. Я считаю, что гибкий механизм экспорта и импорта данных - это то, что отличает хороший клиент базы данных от бесплатных аналогов. Важно не просто экспортировать данные во что-нибудь, а выбирать между разными форматами и кодировками.

Например, в бигтехе очень любят XL. Вам вполне может придти задача залить данные в таблицу или заполнить справочник данными из файла. Конечно, его можно экспортнуть в CSV. Но что делать если файл генерили под Windows, а мы как разработчики все сидим на маках?) В таких случаях спасает возможность выбора кодировки и предварительный просмотр перед выполнением операции.

Экспорт, то есть выгрузку данных в файл, мы можем сделать либо при посмотре всей таблицы, либо при просмотре результатов запроса. DB Client сейчас поддерживает 4 формата: CSV, JSON, SQL, XML. В DataGrip этих форматов конечно сильно больше. Я думаю, этот список можно расширить, но и так уже вполне можно работать.

Однако при выгрузке данных я заметил один минус. Если я просматриваю таблицу по F4, у меня отображается первые 500 строк. При экспорте в файл я интуитивно ожидаю, что выгружу таблицу целиком. DB Client же выгружает ровно те строки, которые отображаются. Вспомним про лимиты отображения и получается, что таблицы больше 1000 строк мы сейчас в принципе в файл не выгрузим. В том же DataGrip из окна просмотра таблица в файл выгружается целиком. Я считаю это наиболее критичной частью и надеюсь, что ребята скоро пофиксят это.

Теперь перейдём к обратной операции. Допустим, у нас есть csv-файл с данными и мы хотим залить его в таблицу. Тут важно, чтобы структура файла и структура таблицы совпадали. На нужной таблице выбираем Import Data from CSV и увидим окно импорта.

Импорт данных из csv-файла в таблицу в DB Client
Импорт данных из csv-файла в таблицу в DB Client

В нём выбираем файл с данными, также можем сконфигурировать различные настройки файла, вроде кодировки и разделителей. Тут получилось почти как в DataGrip! Не хватает только превью данных перед импортом.

Выводы

Вернёмся к тому вопросу, который я вынес в заголовок статьи. Сможет ли DB Client от OpenIDE заменить DataGrip?

Очевидно, что DB Client пока не является полноценной заменой DataGrip. Однако почти весь базовый функционал работы с таблицами уже имеется. Особенно радуют просмотр плана запроса и связей между таблицами. Функционал inline-редактирования нуждается в небольшой доработке (выделение нескольких строк и защита от полной очистки таблицы). Функционал импорта и экспорта уже почти готов: осталось реализовать выгрузку таблицы целиком, добавить превью данных и немного расширить набор доступных форматов. Остальные недостатки мелкие и больше относятся к юзабилити интерфейса.

Добавление этого плагина как части экосистемы OpenIDE - шаг в верном направлении. Если пофиксить все недочёты, о которых я упомянул выше, то на выходе мы получим хороший инструмент в знакомой нам экосистеме, который можно официально купить за рубли в России. А часть функционала так и вовсе будет доступна бесплатно.

Поэтому желаю ребятам не останавливаться на достигнутом и продолжать развивать OpenIDE! В последний год они взяли неплохой темп.

Ну а если вам интересна тема разработки, а также использование современных AI-инструментов, подписывайтесь на мои каналы в telegram и YouTube!