Ранее команда Spring АйО выяснила, что жить без IntelliJ IDEA Ultimate можно, пока Community версия доступна для скачивания без ограничений. И даже если её скачивание станет невозможным, всегда можно будет собрать Community вручную из открытых исходных кодов.

Во второй статье из цикла мы разобрались, как научить Community версию понимать Spring. В третьей рассмотрели возможные альтернативы встроенному в IDE HTTP клиенту, а сегодня узнаем, есть ли альтернативы полюбившейся многим возможностям Ultimate общаться с базой данных через удобный UI прямо в среде разработки.

Что такое DataGrip?

Для начала давайте разберёмся, как в Ultimate реализована работа с базами данных. Функциональность поставляется в виде плагина под названием Database Tools and SQL. Этот плагин является частью Ultimate, но также существует как самостоятельная IDE, специально созданная для работы с данными и имеющая название DataGrip.

То есть де-факто, нам нужно узнать, есть ли альтернатива целой IDE, из основных возможностей которой стоит перечислить следующие:

  • Поддержка 26 различных баз данных, в том числе NoSQL

    • Навигация по объектам

    • Построение диаграмм

    • Генерация скриптов миграций

  • Работа с данными

    • Табличный редактор для добавления/удаления/редактирования/клонирования данных

    • Импорт/экспорт в CSV, JSON, HTML и т.д.

    • Сравнение наборов данных

  • Написание SQL запросов: умное автодополнение, проверки кода, выделение ошибок, быстрые исправления и рефакторинги

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

  • Хорошая интеграция с Java/Spring приложением

    • Подсветка и автодополнение SQL-запросов в java-строках с учетом настроенного соединения к базе данных

    • Навигация из java-кода к визуальным элементам DataGrip

Database Navigator

Конечно, нам, как Java разработчикам, хочется как можно меньше покидать IDE. Поэтому мы начали искать замену DataGrip в маркетплейсе плагинов, в надежде найти бесплатное и подходящее нам решение. Одним из самых популярных плагинов в JetBrains Marketplace является Database Navigator.

По сравнению с DataGrip, Database Navigator поддерживает меньшее количество СУБД, но среди них представлены самые популярные реляционные СУБД: Oracle, MySQL, SQLite, PostgreSQL. Также в числе поддерживаемых СУБД разработчик написал “Any JDBC compliant database (EXPERIMENTAL)”. Так что, в теории, уже сейчас можно попробовать подключиться к любой базе данных, для которой есть JDBC драйвер. Однако, учитывая проблемы, о которых мы поговорим далее, связанные с использованием не experimental СУБД в контексте Database Navigator, особо рассчитывать на эту фичу не стоит.

Оба плагина позволяют просматривать структуру базы данных прямо в IDE. Визуально DataGrip кажется более удобным и приятным. Однако, с точки зрения функциональности, оба решения справляются практически одинаково.

Database Navigator предлагает автодополнение и подсветку синтаксиса при написании SQL-кода.

Но очень часто Database Navigator ругается на абсолютно валидный синтаксис, причём не самых сложных SQL выражений:

Приятно, что запросы (даже которые плагин считает невалидными :D) получается запускать прямо из IDE:

Однако, некоторые моменты не всегда интуитивно понятны. Например, по умолчанию режим "Auto commit" выключен, поэтому запросы не выполняются сразу после их запуска. Может быть это и не было бы проблемой лично для меня, если бы у инструмента была документация или какие-то маркетинговые материалы, благодаря которым я бы смог ознакомиться с основными возможностями инструмента, но таковых не имеется. 

В целом, подобные моменты, конечно, довольно субъективны, и инструмент всегда можно настроить “под себя” (если обрести тайное знание, как именно).

Но, вот, что не субъективно, так это отсутствие какой-либо интеграции с Java/Spring приложением. Да, заинжектировать язык в строки получится:

И в них даже будет работать подсветка синтаксиса и автодополнение по ключевым словам:

Но, вот, подсказок, с учетом конкретного соединения к базе данных, как это реализовано в DataGrip, Database Navigator, к сожалению, предоставить не может.

Плагин заслуживает оценку 2,5–3 из 5. Интеграция с IDE выглядит перспективно, но пока ей не хватает качества и глубины. Сильно разочаровывает отсутствие документации и маркетинговых материалов: без них освоение инструмента становится настоящим испытанием. Особенно раздражают многочисленные ложные срабатывания при валидации SQL-кода. Единственный приятный момент — плагин распространяется под лицензией Apache 2.0. Может найдутся энтузиасты, которые смогут сделать из гнилого леса избу?)

DBeaver – панацея от всех проблем

Одним из самых популярных инструментов для работы с базами данных является DBeaver.

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

Инструмент выделяется тем, что его бесплатная open-source версия поддерживает множество СУБД, делая его доступным для широкой аудитории разработчиков и составляя в этом плане серьезную конкуренцию DataGrip. 

Длинный список
  • MySQL

  • MariaDB

  • PostgreSQL

  • Microsoft SQL Server

  • Oracle

  • DB2

  • SAP® MaxDB®

  • Informix

  • Sybase®/SAP® ASE

  • Mimer SQL

  • InterSystems Caché

  • Firebird

  • Ingres

  • Yellowbrick

  • Babelfish

  • YugabyteDB

  • Virtuoso

  • CUBRID

  • DuckDB

  • Apache Calcite Avatica

  • Apache Kylin

  • Data Virtuality

  • Denodo 8

  • Dremio

  • EDB

  • Google Cloud Spanner

  • H2GIS

  • HSQLDB

  • InterSystems IRIS

  • Trino

  • CrateDB

  • Monetdb

  • OceanBase

  • HeavyDB (OmniSciDB)

  • Openedge

  • Pervasive SQL

  • Salesforce Data Cloud

  • SQream DB

  • Fujitsu Enterprise Postgres

  • Materialize

  • TiDB

  • Salesforce

  • Kafka (ksqlDB)

  • Dameng (DM8)

  • Altibase

  • RisingWave

  • GaussDB

  • Greenplum

  • Exasol

  • Vertica

  • Teradata

  • SAP® HANA®

  • Netezza

  • Azure Databricks

  • Ocient

  • Kognitio

  • PrestoDB

  • ClickHouse

  • StarRocks

  • MongoDB

  • Couchbase

  • CouchDB

  • Azure Cosmos DB

  • AWS Athena

  • AWS Redshift

  • AWS DynamoDB

  • AWS Aurora

  • AWS DocumentDB

  • AWS Keyspaces

  • AWS Timestream

  • Google Bigtable

  • Google BigQuery

  • Amazon Neptune

  • SQL Azure

  • Snowflake

  • SingleStore

  • NuoDB

  • Oracle NetSuite

  • Oracle Autonomous Data Warehouse

  • Oracle Autonomous Transaction Processing

  • Oracle Autonomous JSON Database

  • Cloud SQL

  • AlloyDB

  • Firestore

  • Apache Hive

  • Spark Hive

  • Apache Drill

  • Apache Phoenix

  • Apache Impala

  • Gemfire XD

  • Apache Ignite

  • Apache Kyuubi

  • Cloudera

  • CockroachDB

  • SnappyData

  • ScyllaDB

  • Apache Cassandra

  • Redis

  • Timescale

  • InfluxDB

  • Machbase

  • TDengine

  • Neo4j

  • OrientDB

  • Elasticsearch

  • Solr

  • OpenSearch

  • Open Distro ElasticSearch

  • SQLite

  • HSQLDB

  • H2

  • Apache Derby / Java DB

  • Microsoft Access

  • Windows Management Instrumentation

  • DBF

  • Raima

К тому же, это проверенное временем решение: регулярные обновления, исправления и широкое комьюнити дают надежды на стабильность работы DBeaver и скорость исправления недочётов. Даже вопросов на StackOverflow с тегом dbeaver в 1.5 раза больше, чем с тегом datagrip.

С помощью DBeaver удобно изучать структуру базы данных, запускать SQL-скрипты и даже создавать ER-диаграммы.

В целом, инструмент, именно как клиент для работы с базами данных, отличный. Универсальный, бесплатный, интуитивно понятный и проверенный временем, но в контексте замены DataGrip ему не хватает лишь одного – интеграции с IDE. Поэтому общая оценка 4 из 5.

pgAdmin, phpMyAdmin и mongo-express – братья наши меньшии

Помимо универсального решения в виде DBeaver, которое отлично подойдет для большинства сценариев работы с многими СУБД, на рынке существуют и заточенные под каждого конкретного вендора клиенты. К наиболее популярным можно отнести pgAdmin для работы с PostgreSQL, phpMyAdmin для MySQL и MariaDB, mongo-express для MongoDB и т.д.

Минусы и плюсы у всех этих решений практически идентичны с теми, которые мы перечислили для DBeaver. Но, конечно же, ввиду ориентированности под конкретную СУБД, каждое из решений предоставляет набор некоторых уникальных возможностей, адаптированных под особенности каждой СУБД. 

Например, одной из таких возможностей является встроенный планировщик задач (pgAgent) в pgAdmin, который позволяет создавать и управлять задачами автоматизации для PostgreSQL. В DBeaver в свою очередь есть аналог, который называется Task Scheduler, но доступен он только в платной версии. 

Интеграции с IDE в том виде, которая реализована в DataGrip эти инструменты, конечно же, не предоставляют. Но по крайней мере, есть возможность быстро их получить в виде Docker Compose сервисов с использованием Amplicode:

Здесь даже есть кое-какая интеграция в плане визуального отображения: можно увидеть запущен ли сервис (1), и, если да, то перейти к нему через inlay-иконку (2):

Не уверены, что это можно отнести к плюсам dedicated DB-клиентов по сравнению с DBeaver, скорее к минусу Amplicode, что DBeaver (а точнее CloudBeaver) в виде Docker Compose сервиса он сгенерировать не предлагает ;) Ребята – ждём!

CLI всему голова

После статьи про HTTP-клиент мы точно не могли обойти стороной CLI инструменты, а также TUI, которые явно не оставили равнодушными многих из разработчиков. К тому же, отрицать популярность psql сложно. Для простых запросов воспользоваться им, пожалуй, будет действительно быстрее и удобнее, чем "пробираться" через UI рассмотренных выше решений.

А для тех, кто хочет некоторого промежуточного решения между голой командной строкой и навороченным UI, оставим ссылки на следующие TUI DB-клиенты:

Заключение

Подводя итог, можно с уверенностью сказать, что DBeaver — это профессиональный инструмент, который несмотря на отсутствие интеграции с IDE выделяется высоким качеством и удобством работы. Database Navigator же делает ставку на то, чтобы воспроизвести UX клиента от JetBrains, оставляя за скобками функциональность и качество реализации. Карго-культ во всей красе...

По мнению команды Spring АйО, в качестве альтернативы DataGrip стоит обратить внимание как на DBeaver, так и на более узкоспециализированные клиенты вроде pgAdmin, phpMyAdmin и другие. Которые сейчас довольно легко и просто распространять вместе с проектом в docker-compose файлах.

А какой DB-клиент используете вы? Расскажите про своего фаворита в комментариях :)


Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Комментарии (13)


  1. almirus
    13.12.2024 18:22

    Умеет значения из курсора показать?

    select pkg_some.function() from dual?


  1. ant1free2e
    13.12.2024 18:22

    я выскажу личное мнение: по сравнению со сбалансированностью плагина из ультимейт все альтернативы - мутная шняга, где чтобы посмотреть теже результаты надо сделать в разы больше движений. И точно такая же история с веб-клиентом.


  1. DasMeister
    13.12.2024 18:22

    На самом деле, зависит от того, что и как вы пишите.

    Если SQL часть кода на языке поддерживаемом IDE (константа, аргумент аннотации ETC), ничето не заменит DataGrip. Т.к. при проведенной миграции и тестовом датасете в IDEA/Goland/Rover/Pycharm он будет не только подсвечивать запрос, но ещё и верифицировать его на коммитах, показывать ошибки без дополнительного усилия со стороны разработчика.

    Думаю что тоже самое будет касаться и ормов. Коллеги которые используют hibernate/sqlalchemy - могут подсказать.

    Сам по себе клиент не имеет смысла. Хотя у DataGrip'а вне IDEA тоже есть применение, когда у тебя all products pack.


  1. travacry
    13.12.2024 18:22

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


  1. Kerman
    13.12.2024 18:22

    DBeaver очень сильно перегружен, просто адовый интерфейс. DataGrip сильно платный и тоже не без недостатков. Помню, хотел его для Postgres использовать и не нашёл, как работать с комментами полей.

    Я сейчас разрабатываю свою утилиту, но она отталкивается от модели данных, а не текущего соединения.


  1. ritorichesky_echpochmak
    13.12.2024 18:22

    Пробовал Navicat (безумно дорогая фигня), DBeaver, посмотрел краем уха HeidiSQL и всякие эти SSMS, воркбенчи, пехапемуадмины... DataGrip всех их рвёт по возможностям и удобству. Есть небольшие нюансики, но в целом лучше инструмента для разгребания БД просто не существует. Это по сути был первый продукт с которого моя подписка на JB началась.

    В плагинах к IDE, насколько они сами говорили, используется та же основа что и для DataGrip, поэтому плюс-минус всё должно примерно одинаково работать. Более того плагин ещё ConnectionString пытается подхватить автоматом из конфигов популярных фреймворков. И в райдере у меня автокоммит вполне себе включен по умолчанию (но его можно выключить на этапе настройки). Если автокоммит изменений не включать, то на всяких MSSQL можно получить ситуацию когда изменения ждущие commit блокируют зааффекченные записи.

    С кастомными JDBC-драйверами как-то даже к древнючему dBase достучался, хоть и ограниченно, но работает, вытащить данные вполне можно.

    Ну и не знаю как в райдере, но в актуальном "бесплатном для хомяков" вебшторме пролетало

    Built-in support for database tools and SQL

    The Database Tools and SQL plugin, which was previously only available via a separate paid subscription, is now bundled with WebStorm at no extra cost.


    1. VGoudkov
      13.12.2024 18:22

      всех их рвёт по возможностям и удобству

      Не всех и не всегда :) Как не было возможности заполнить FK-столбец, выбрав из dropdown значение, так и нет. Я уж не говорю про то, чтобы дать возможность выбрать значение, когда WHERE пишешь.


      1. ritorichesky_echpochmak
        13.12.2024 18:22

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

        Для меня же реальную ценность представляет обратное - я могу писать запросы с проверкой на корректность даже в условиях плохой связи или при её регулярном отсутствии после того как DG проиндексировал схему БД


  1. VGoudkov
    13.12.2024 18:22

    SQL Workbench/J разумется, (недоступен из РФ). НА DG переходил с трудом, хотя возможность поработать с SQL из любого места, включая markdown и asciidoc - бесценна.

    В SQLWB/J интересен не столько сам клиент, сколько его расширения Wbxxx, коим посвящена добрая треть руководства на 200+ страниц. Задачи получается решать... весьма специфические.


  1. ivanovvv
    13.12.2024 18:22

    Еще один из вариантов - это запуск в docker образа PhpMyAdmin


  1. duke_alba
    13.12.2024 18:22

    Бобёр неплох, но с дырками. Можно поставить себе "экспериментальный" RustRover и использовать dB плагин.


  1. timeking
    13.12.2024 18:22

    К слову, о вышеупомянутых плагинах: eсли вы пользовались Database Navigator, то знаете, что он всё ещё не поддерживает последнюю версию IDEA, поэтому мы, для вашего удобства, форкнулись в https://github.com/explyt/dbn и собрали сборку, которая поддерживает IDEA 2024.3.

    Выложили версию eap, она будет обновляться до выхода релиза оригинального плагина.


  1. Estorm
    13.12.2024 18:22

    Dbeaver хз как сравнить две идентичные таблицы из разных схем, например. Когда в ultimate это делалось одной кнопкой, а результат расхождений в данных сразу выделялся. Ещё бесит, что dbeaver часто ругается на невидимые символы, когда вставляешь скопированный запрос.