Привет! Встречайте DataGrip 2022.1 — наше первое крупное обновление в этом году. Если вы работаете с базами данных в других IDE от JetBrains, вам этот пост тоже будет интересен.
Импорт и экспорт
Копирование нескольких объектов
Это главное улучшение в версии 2022.1: теперь можно выбрать сразу несколько таблиц и скопировать их в другое место.
Выберите таблицы, которые нужно скопировать и нажмите F5, чтобы открыть диалог экспорта.
Как и при экспорте отдельной таблицы, можно настроить соответствие столбцов и внешний вид, а также изменить DDL новой таблицы.
DataGrip поддерживает экспорт в другие базы данных, то есть копировать можно в любую базу данных в вашем проекте, например из SQL Server в PostgreSQL.
Каждую таблицу можно скопировать как в существующую, так и в новую.
Улучшения
DBE-5200: действие Edit as table теперь работает корректно, даже когда в строках исходного файла разное количество столбцов.
DBE-14541: корректно работает добавление строки к CSV-файлу, содержащему один столбец.
DBE-14735: исправлена ошибка, возникавшая при одновременном экспорте таблиц с датами.
Редактор данных
Формат отображения по умолчанию для двоичных ячеек
Мы добавили новую настройку Automatically detect binary values с двумя вариантами: UUID и Text. Определение UUID теперь можно отключить.
[MongoDB] Редактирование полей в результатах
Вы можете редактировать результаты запросов к MongoDB. Это будет работать даже в случае, когда за .find() идут вызовы limit() или sort().
[SQL Server] Поддержка результатов внутри редактора в пакетном режиме запуска
Если в Transact-SQL запустить параллельно несколько запросов, они выполняются в пакетном режиме. Раньше из-за этого было нельзя посмотреть результаты по каждому запросу внутри редактора, но сейчас все хорошо.
Кроме того, DataGrip теперь удаляет все выражения SQLCMD при выполнении запросов в пакетном режиме (подробнее см. DBE-14920).
Улучшения
DBE-8561: нажатие за пределами календаря больше не приводит к сбросу изменений.
DBE-9632: нажатие клавиши Enter сохраняет выбранное значение в календаре.
DBE-11706: в календаре работает клавиша Tab.
DBE-9974: теперь можно отменить связь файлов .csv с режимом просмотра ‘View as Table’.
DBE-13040: мы упростили отображение скрытых столбцов: достаточно кликнуть на нужный столбец в списке.
DBE-14516: индикатор размера ячейки больше не показывается для полностью загруженных значений, а чтобы содержимое было правильно выровнено, используется моноширинный шрифт.
DBE-14670: Просмотрщик геоданных правильно синхронизируется.
DBE-10851: исправлена ошибка со шрифтом в режиме «просмотр в виде дерева».
DBE-9710: [Oracle]: Поля со времени теперь учитывают часовые пояса.
DBE-14852: [MariaDB, Aurora MySQL]: в новой версии пустые даты правильно отображаются в редакторе данных.
DBE-15009: [Sybase ASE]: В результатах отображаются все столбцы.
DBE-15031: [Snowflake]: правильно генерируется запрос обновления таблиц со значениями DEFAULT.
Контекстное меню столбца теперь отображается также в транспонированном виде (Transpose).
Интроспекция
Шаблоны сессий для интроспекции
Иногда для интроспекции требуются особые права, предоставляемые конкретным пользователям. Теперь для интроспекции можно использовать отдельную учетку — для этого создайте на вкладке Options шаблон сессии.
После этого шаблон можно использовать для интроспекции, выбрав его название в поле Use session template в разделе Introspection.
[Oracle] Интроспекция отдельных объектов
Теперь можно обновить один объект отдельно от остальных объектов в базе данных.
Это особенно полезно, если вы используете новую функцию Introspection levels. Если нужно посмотреть исходный код одного объекта, достаточно нажать кнопку Refresh Object в проводнике базы данных.
Кроме того, при открытии редактора исходного кода DataGrip предложит выполнить его интроспекцию.
[H2] Поддержка версии 2.Х
Мы добавили поддержку версии H2 2.X. Что изменилось:
Новая версия DataGrip корректно выполняет интроспекцию типов. Большинство ошибок было связано с составными типами: ARRAY и ROW;
Корректно выполняется интроспекция столбцов со встроенными последовательностями (auto_increment, generated always as identity и т. п.);
Ограничения-проверки и внешние ключи больше не теряются;
Загружаются исходные коды для представлений, триггеров, функций и процедур;
Для доменов отображается информация о контрольных предикатах.
[YugabyteDB] Добавлена базовая поддержка
Мы добавили JDBC-драйвер для YugabyteDB, и теперь можно в один клик создать источник данных YugabyteDB.
Базовая поддержка состоит YugabyteDB из интроспекции JDBC-драйвера и подсветки синтаксиса PostgreSQL.
Улучшения
DBE-13521: [ClickHouse]: добавлена интроспекция исходного кода материализованных представлений.
Генерация кода
Новая версия Modify Table
Мы готовим новую версию окна Modify Table. Интерфейс новой версии будет генерироваться на основе свойств объекта, поэтому там будут еще и параметры специфичные для конкретной базы данных.
В новом окне Modify Table можно добавлять и редактировать Ограничения-проверки столбцов — раньше этого не было. Кроме того, теперь можно редактировать свойства таблиц и столбцов, которые DataGrip проинтроспектировал.
Надеемся, вы оцените новый интерфейс редактирования столбцов: теперь их не надо сворачивать и разворачивать.
Улучшения в старой Modify Table
DBE-15000, DBE-15001: [PostgreSQL]: теперь при редактировании грантов генерируется правильный код.
DBE-5136: [SQL Server]: при удалении столбцов с ограничениями с помощью Modify Table пользователь получает работающий скрипт.
DBE-14760: [MySQL]: окно Modify Table больше не повреждает функциональный индекс.
DBE-2827: [MySQL]: можно изменить атрибут AUTO_INCREMENT.
DBE-14801: [Snowflake]: сгенерированный DDL-скрипт содержит выражения для создания последовательностей по умолчанию.
Окно сравнения баз данных
Перестановка исходного и целевого объекта
Мы добавили кнопку, которая позволяет при сравнении объектов и схем поменять исходный и целевой объект местами.
Улучшения
Мы постоянно работаем над улучшением недавно появившегося окна сравнения баз данных. Некоторые исправления были сделаны уже в версии 2021.3, другие появились в этом релизе, например:
DBE-15063: новый умный алгоритм сравнения строк решил проблему учета регистра ключевых слов.
DBE-14686: теперь учитывается параметр Reformat generated code.
DBE-14782: алгоритм сравнения баз данных находит потенциально идентичные объекты, даже если у них разные имена.
DBE-14431: [Oracle]: исключение Array index out of bounds больше не появляется.
Редактор кода
Convert to subquery
Мы добавили новое удобное действие: Convert To Subquery. Теперь для преобразования подзапросов не нужно использовать Surround Live Template. Даже выбирать запрос больше не надо: достаточно нажать Alt+Enter | Convert To Subquery.
Улучшенный алгоритм автоматической расстановки отступов
Мы улучшили алгоритмы автоматической расстановки отступов. Про это была пара тикетов: DBE-14825 и DBE-874, но мы пошли дальше. Теперь автоматическая расстановка отступов должна работать корректно всегда и везде.
[PostgreSQL] Поддержка многодиапазонных типов
Многодиапазонные типы появились в PostgreSQL 14. В этом релизе мы добавили поддержку для встроенных многодиапазонных типов.
Поддержка пользовательских многодиапазонных типов появится позже.
Улучшения
DBE-11683: [PostgreSQL]: добавлена поддержка синтаксиса ROWS FROM.
DBE-11868: [PostgreSQL]: исправлена проблема, приводившая к появлению неразрешенных табличных выражений.DBE-15061: [PostgreSQL]: исправлена проблема, из-за которой происходила некорректная вставка синтаксиса JSONB.
DBE-14888: [PostgreSQL]: добавлена поддержка BEGIN ATOMIC.
DBE-15052: [Redshift]: добавлена поддержка ALTER MATERIALIZED VIEW.
DBE-11830: [Oracle]: добавлена поддержка синтаксиса USING INDEX ENABLE.
DBE-6548: [Oracle]: корректно подсвечиваются столбцы в CREATE MATERIALIZED VIEW LOG.
DBE-15095: [Snowflake]: добавлена поддержка параметра WITH TAG в выражениях CREATE STAGE.
DBE-14793: [Snowflake]: добавлена поддержка выражения EXECUTE.
DBE-11247: [Snowflake]: теперь в выражениях корректно подсвечивается JSON.
DBE-14843: [BigQuery]: добавлена поддержка QUALIFY.
DBE-13995: [BigQuery]: добавлена поддержка столбца UNNEST.
DBE-14504: [ClickHouse]: добавлена поддержка литералов сопоставления.
DBE-15013: [ClickHouse]: добавлена поддержка UNION DISTINCT.
Выполнение запросов
Отмена выполняемых запросов
Раньше при многократном нажатии на кнопку Cancel statement могло показаться, что выполнение запроса прекращено, но на самом деле база данных продолжала его выполнять.
Такое поведение было вызвано хитрой логикой: при первом нажатии DataGrip отправляла базе данных запрос на отмену, а при втором отменяла процесс JDBC-драйвера, завершая все соединения с источником данных. Дальше будем называть это деактивацией источника данных.
В результате второй запрос на отмену возвращал ошибку, потому что соединение было разорвано, а не потому, что отмена была успешной.
Мы упростили логику отмены. Надеемся, теперь понятнее, что отменен именно запрос:
Во время отмены запроса индикатор выполнения на полях превращается в красный квадрат;
Отображается индикатор выполнения отмены. Он показывает источник данных и сессию.
Мы больше не деактивируем источники данных без предупреждения, так как это может представлять опасность для некоторых параллельно выполняемых процессов. Таким образом, если вы повторно нажмете на иконку Cancel, DataGrip спросит, действительно ли вы хотите деактивировать источник данных или предпочтете подождать. Если вы решите деактивировать источник данных, запрос будет остановлен для DataGrip, но в базе данных он будет выполняться дальше.
Если запрос на отмену не будет выполнен в течение 10 секунд, система сама предложит деактивировать источник данных.
После отмены запроса слева от него на полях редактора появится иконка в виде красного зачеркнутого круга.
Отмена соединений
Раньше при попытке прервать выполнение запроса во время создания соединения источник данных деактивировался.
Теперь можно прервать не только выполнение запроса, но и создание соединения. Это особенно важно для самого первого запроса в консоли, который в том числе устанавливает соединение.
Вы можете остановить соединение, не деактивируя источник данных: если нажать кнопку Cancel во время создания соединения, процесс будет остановлен, и появится сообщение Connection canceled.
Это касается не только запросов из консоли. Например, если вы создаете соединение перед началом интроспекции, при ее прерывании создание соединения будет отменено, но источник данных не деактивируется.
Общие улучшения
Переработанные настройки
Структура настроек Preferences в разделе Database не менялась с первой версии DataGrip. Мы решили, что пора сделать этот раздел удобнее, и обновили его структуру.
Что изменилось:
Настройка Track databases/schemas creation and deletion перенесена из раздела General в Data Source Properties | Options и теперь относится к конкретному источнику данных. Эта настройка определяет, нужно ли обновлять список схем после создания или удаления схем в консоли запросов.
Другие настройки остаются общими, но размещены в более подходящих разделах.
Обратите внимание, что в этом релизе следующие настройки будут сброшены к значениям по умолчанию:
Data Source properties | Track databases/schemas creation and deletion – True.
Editor | General | Editor Tabs | Database | Always show qualified names for database objects in tab titles – False.
Editor | General | Editor Tabs | Database | Shorten datasource and object names in tab titles – True.
Равные вкладки в режиме Split
Теперь рабочее пространство в редакторе можно распределить так, чтобы вкладки имели равную ширину. Это можно настроить здесь: Settings / Preferences | Advanced Settings | Editor Tabs | Equalize proportions in nested splits..
Экспорт UML-диаграмм в другие форматы
Диаграммы можно экспортировать в форматах yEd (.graphml), JGraph (.drawio), Graphviz (.dot и .dot с позициями), Mermaid (.md), Plantuml, а также в файлы .uml IDEA. Благодаря этому их можно использовать в сторонних инструментах.
Улучшения
DBE-15043: теперь навигация по закладкам Bookmarks осуществляется так же, как по объектам проводника баз данных.
DEA-129631: добавлена поддержка дробных размеров шрифтов.
На этом всё, будем рады узнать ваши впечатления от новой версии! У нас есть свой канал в Телеграме, там можно задавать вопросы и делиться опытом.
Если встретите баг - пишите в трекер :)
Команда DataGrip.