DataGrip 2022.1 最新变化

我们 2022 年的第一个主要更新 DataGrip 2022.1 现已正式发布。 它包含多项实用增强和改进。 让我们看看都有些什么。

导入/导出

复制多个对象

这是此版本的一大亮点。 您现在可以选择多个表并将其复制到另一个架构。

选择要复制的表,然后按 F5 打开导出对话框。

与导出单个表一样,您可以映射列以及查看和更改新表的 DDL。

 

如您所知,DataGrip 支持跨 DBMS 导出,这意味着目标架构可以属于您项目中的任何数据库。 将所有表从 PostgreSQL 数据库复制到 SQL Server 非常简单。

您还可以指定现有表而不是新表作为目标。 这样操作后,源表的数据将被添加到目标表。

质量改进

  • DBE-5200:即使源文件中的行具有不同的列数,Edit as table(作为表编辑)操作现在也可以正常工作。
  • DBE-14541:向单列 CSV 文件添加一个行现在可以正常运行。
  • DBE-14735:修正了同时导出包含时间戳的表的错误。

数据编辑器

二进制单元的默认显示格式

我们添加了一个新设置 Automatically detect binary values(自动检测二进制值),它有两个选项:UUIDText(文本)。 现在可以禁用 UUID 检测。

编辑查询结果中的字段 MongoDB

您现在可以直接从控制台中编辑 对MongoDB 集合的查询的结果。 即使 .find() 后面是 sort()limit() 之类的方法,这也可以运行。

对批处理模式下编辑器内结果的支持 SQL Server

在 Transact SQL 中同时运行多条语句时,它们以批处理方式执行。 此前,这使得各个查询难以显示编辑器内结果,但现在 DataGrip 可以正确处理这种情况。

另外,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-9710Oracle 时间戳值现在遵循时区。
  • DBE-14852MariaDB、Aurora MySQL 空白日期现在可以在数据编辑器中正确显示。
  • DBE-15009Sybase ASE 现在所有列都会显示在结果视图中。
  • DBE-15031Snowflake 具有 DEFAULT 值的表的更新查询现在可以正确生成。
  • 列的上下文菜单现在也显示在 Transpose(转置)视图中。

内省

用于内省的会话模板

有时,内省需要被授予特殊用户的特殊权限。 现在可以使用专用凭据进行内省。 为此,首先在 Options(选项)标签页中创建一个专用会话模板。

 

然后,在 Introspection(内省)部分的 Use session template(使用会话模板)字段中选择其名称,使用此模板进行内省。

片段化内省 Oracle

您现在可以独立于数据库中的所有其他对象刷新对象。

 

这对于新的 Introspection levels(内省级别)功能格外适用。 如果只需要查看单个对象的源代码,点击数据库资源管理器中的 Refresh Object(刷新对象)按钮即可。

此外,打开对象的源编辑器时,DataGrip 将提供内省所选对象的选项。

对版本 2.x 的支持 H2

我们增加了对 H2 版本 2.x 的支持。 以下是更改列表:

  • DataGrip 现在可以正确内省类型。 大多数问题与复合类型 ARRAYROW 有关。
  • 现在可以正确内省具有内置序列的列(auto_incrementgenerated always as identity 等)。
  • 检查约束和外键不再丢失。
  • 为视图、触发器、例程加载源。
  • 为域显示有关检查谓词的信息。

添加到基本支持 YugabyteDB

我们为 YugabyteDB 发布了 JDBC 驱动程序,您可以一键创建 YugabyteDB 数据源。

质量改进

  • DBE-13521ClickHouse 具体化视图的源代码现在会被内省。

代码生成

Modify Table(修改表)的新版本

我们正在稍微重做 Modify Table(修改表)窗口。 新版本将具有基于内省属性的完全生成的 UI,这将允许其带有各种特定于数据库的参数。

目前我们只发布了一小部分更新,但这部分更新已经非常实用。 新的 Modify Table(修改表)窗口可以添加和编辑列检查约束,此前这样的操作是无法完成的。 此外,您现在可以编辑由 DataGrip 内省的表和列的所有属性。

我们认为您会特别喜欢列的新 UI,因为新 UI 不再有让许多用户感到困惑的收起或展开。

质量改进

  • DBE-15000DBE-15001PostgreSQL 现在在编辑授权时会生成正确的代码。
  • DBE-5136SQL Server 现在,通过 Modify Table(修改表)移除带有约束的列时,您将获得有效的脚本。
  • DBE-14760MySQL Modify Table(修改表)窗口不再破坏函数索引。
  • DBE-2827MySQL 可以修改 AUTO_INCREMENT 特性。
  • DBE-14801Snowflake 生成的 DDL 脚本包含用于创建默认序列的语句。

数据库差异查看器

交换源和目标

我们新增了一个按钮,可供在比较对象或架构时交换源和目标。

质量改进

我们一直在改进最近推出的数据库差异查看器窗口。 有些修正已在 2021.3 版本中发布,还有些是在 2022.1 中新加入,包括:

  • DBE-15063:用于字符串比较的新智能算法解决了在差异窗口中遵循关键字大小写的问题。
  • DBE-14686Reformat generated code(重新格式化生成的代码)选项受到遵循。
  • DBE-14782:差异查看器会检测出名称不同但可能相同的对象。
  • DBE-14431Oracle Array index out of bounds(数组索引超出范围)异常应当不会再发生。

代码编辑器

Convert To Subquery(转换为子查询)意图

我们引入了一个方便的新意图,Convert To Subquery(转换为子查询)。 您不再需要使用包围实时模板转换子查询。 事实上,您甚至都不必费心选择查询。 只要按下 Alt+Enter | Convert To Subquery(转换为子查询)即可。

更好的自动缩进算法

我们改进了自动缩进算法。 工单 DBE-14825DBE-8742 与此相关,但我们考虑了所有可能的情况,力求让自动缩进在任何地方都能正常运行。

支持多范围类型 PostgreSQL

PostgreSQL 14 中引入了多范围类型,我们增加了对内置类型的支持。

未来将支持自定义多范围类型。

质量改进

  • DBE-11683PostgreSQL 添加了对 ROWS FROM 语法的支持。
  • DBE-11868PostgreSQL 修正了导致未解析的通用表表达式的问题。
  • DBE-15061PostgreSQL 修正了导致 JSONB 语法注入错误的问题。
  • DBE-14888PostgreSQL 添加了对 BEGIN ATOMIC 的支持。
  • DBE-15052Redshift 添加了对 ALTER MATERIALIZED VIEW 的支持。
  • DBE-11830Oracle 添加了对 USING INDEX ENABLE 语法的支持。
  • DBE-6548Oracle 修正了 CREATE MATERIALIZED VIEW LOG 语句中的列解析。
  • DBE-15095SnowflakeCREATE STAGE 语句中添加了对 WITH TAG 选项的支持。
  • DBE-14793Snowflake 添加了对 EXECUTE 语句的支持。
  • DBE-11247Snowflake JSON 现在会在语句中正确高亮显示。
  • DBE-14843BigQuery 现已支持 QUALIFY
  • DBE-13995BigQuery 现已支持 UNNEST 列。
  • DBE-14504ClickHouse 现已支持映射字面量。
  • DBE-15013ClickHouse 现已支持 UNION DISTINCT

运行查询

取消正在运行的语句

此前,多次点击 Cancel statement(取消语句)按钮后,虽然查询看似已经终止,但请求实际上还在数据库中继续执行。

这种行为背后的逻辑颇为棘手。 第一次点击时,DataGrip 向数据库发送取消请求,第二次点击时,它会取消 JDBC 驱动程序进程,终止与数据源的所有连接(我们将此称为数据源停用)。 结果,因为连接丢失,而不是因为取消实际完成,DataGrip 收到的是第二个取消请求的错误。

我们已经让取消逻辑更加简单。 希望现在更清楚的是,被取消的是请求:

  • 请求被取消时,装订区域上的进度指示器显示红色方块。
  • 取消进度条将会出现, 标识数据源和会话。

我们不会在没有警告的情况下停用数据源,因为这对于同时发生的某些进程可能具有潜在危险。 因此,如果您再次点击 Cancel(取消)图标,DataGrip 会询问您是要终止远程进程还是要继续等待。 如果选择停用数据源,则 DataGrip 的查询将停止,但会继续在数据库中执行。

空闲取消 10 秒后,可以选择停用数据源。

取消查询后,左侧会出现显示禁止符号的装订区域图标。

取消连接

此前,在创建连接期间尝试中止请求时,数据源会被停用。

现在,您不仅可以中断请求的执行,还可以中断连接的创建。 这与控制台中的第一个查询特别相关,它也创建了一个连接。

您现在可以在不停用数据源的情况下停止连接创建:如果在创建连接时点击了 Cancel(取消)按钮,创建将被停止并显示 Connection canceled(连接已取消)消息。

这不仅仅与来自查询控制台的查询有关。 例如,如果您在开始内省前创建连接,则中断内省将取消连接的创建,而不会停用数据源。

IDE 常规

重做了设置

Database(数据库)部分中 Preferences(偏好设置)设置的结构从 DataGrip 的第一个版本起没有改变过。 我们认为是时候更新结构来提高这一部分的实用性了。 这是我们的想法:

Track databases/schemas creation and deletion(跟踪数据库/架构创建和删除)设置已从 General(常规)部分移至 Data Source Properties | Options(数据源属性 | 选项),并且现在指向特定数据源。 此设置会确定在查询控制台中创建或删除架构后是否需要更新架构列表。

其他设置仍然是全局的,但现在位于更合适的部分中。

请注意,这些设置将在此更新后重置为其默认值:

  • Data Source properties | Track databases/schemas creation and deletion – True(数据源属性 | 跟踪数据库/架构创建和删除 – True)。
  • Editor | General | Editor Tabs | Database | Always show qualified names for database objects in tab titles – False(编辑器 | 常规 | 编辑器标签页 | 数据库 | 始终在标签页标题中显示数据库对象的限定名称 – False)。
  • Editor | General | Editor Tabs | Database | Shorten datasource and object names in tab titles – True(编辑器 | 常规 | 编辑器标签页 | 数据库 | 缩短标签页标题中的数据源和对象名称 – True)。

平均拆分标签页

您现在可以在编辑器标签页之间分配工作空间,使其具有相同的宽度。 为此,请转到 Settings / Preferences | Advanced Settings | Editor Tabs | Equalize proportions in nested splits(设置 / 偏好设置 | 高级设置 | 编辑器标签页 | 在嵌套拆分中平衡比例)。

将 UML 图表导出为其他格式

图表现在可以导出为 yEd .graphml、JGraph .drawio、Graphviz .dot、带有位置的 Graphviz .dot、Mermaid .md、Plantuml 和 IDEA .uml 文件,从而与第三方工具兼容。

质量改进

  • DBE-15043:书签现在与数据库资源管理器条目提供相同的导航行为。
  • DEA-129631:现在支持小数字体大小。