首页 > 解决方案 > 错误 CREATE DATABASE 无法在事务块内运行

问题描述

我正在尝试使用 jOOQ 从在 Micronaut 框架中运行的 Java 应用程序创建数据库。

编码

contextSupplier.get().createDatabaseIfNotExists(this.databaseName).execute();

使用 PostgreSQL 数据源失败:

org.jooq.exception.DataAccessException: SQL [do $$ begin create database "mydb"; 当 sqlstate '42P07' 然后为 null 时出现异常;结束$$]; 错误:CREATE DATABASE 不能在事务块内运行

是否有一种简单的方法可以仅针对此语句在 jOOQ 中关闭事务?

标签: postgresqljooqmicronaut

解决方案


从 jOOQ 3.14 开始,DSLContext.createDatabaseIfNotExists()这些方言支持该方法(参见其@Support注释):

@Support({AURORA_POSTGRES,COCKROACHDB,MARIADB,MEMSQL,MYSQL,SQLDATAWAREHOUSE,SQLSERVER})

因此,jOOQ for PostgreSQL 尚不支持此语句 - 如果我没记错的话,正是出于这个原因。也许有一种不同的方式来模拟该语句,但它尚未实现。


推荐阅读