На днях состоялся релиз 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 на интересующей нас таблице. Никакого хоткея на это действие по умолчанию нет, хотя я считаю, что он не помешал бы.

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

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

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

Для просмотра плана запроса нам поможет инструмент 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 и увидим окно импорта.

В нём выбираем файл с данными, также можем сконфигурировать различные настройки файла, вроде кодировки и разделителей. Тут получилось почти как в DataGrip! Не хватает только превью данных перед импортом.
Выводы
Вернёмся к тому вопросу, который я вынес в заголовок статьи. Сможет ли DB Client от OpenIDE заменить DataGrip?
Очевидно, что DB Client пока не является полноценной заменой DataGrip. Однако почти весь базовый функционал работы с таблицами уже имеется. Особенно радуют просмотр плана запроса и связей между таблицами. Функционал inline-редактирования нуждается в небольшой доработке (выделение нескольких строк и защита от полной очистки таблицы). Функционал импорта и экспорта уже почти готов: осталось реализовать выгрузку таблицы целиком, добавить превью данных и немного расширить набор доступных форматов. Остальные недостатки мелкие и больше относятся к юзабилити интерфейса.
Добавление этого плагина как части экосистемы OpenIDE - шаг в верном направлении. Если пофиксить все недочёты, о которых я упомянул выше, то на выходе мы получим хороший инструмент в знакомой нам экосистеме, который можно официально купить за рубли в России. А часть функционала так и вовсе будет доступна бесплатно.
Поэтому желаю ребятам не останавливаться на достигнутом и продолжать развивать OpenIDE! В последний год они взяли неплохой темп.
Ну а если вам интересна тема разработки, а также использование современных AI-инструментов, подписывайтесь на мои каналы в telegram и YouTube!
