在 运行 个 Grails 应用程序上创建一个新数据库

Create a new database on running a Grails Application

以下是 Datasource.groovy 的配置详情:

development {
        dataSource {
            dbCreate = "create-drop" 
            url = "jdbc:postgresql://localhost:5432/myDb"
        }
    }

如果数据库是手动创建的,此配置工作正常。尝试了 dbCreate="create-drop" 或 "update" 或 "create" 但其中 none 创建了一个新数据库。 还尝试了 "CREATE DATABASE mydb" 从服务但它给出了一个错误报告 "CREATE DATABASE not allowed from transaction block".

避免手动创建数据库的任何其他方法。

首先,dbCreate 属性用于指定是否要 create/update 架构,即 table 是否用于现有数据库。它不会创建新数据库。

dbCreate 的不同值:

create:在您的应用程序启动时,这将删除并重新创建您的架构。这将确保您始终拥有一个干净的 table 结构,并且您的所有数据在每次启动时都会重置。

create-drop - 这与启动应用程序时的创建完全一样,此外,当应用程序正常或正常关闭时,它会删除所有 tables。

update - 将数据库模式与您当前的数据模型同步。

validate - 只需在启动时将您的数据模型与数据库进行比较,并在必要时创建警告。

关于:

Any other method to avoid creating the database manually.

创建一个 shell 脚本,在您启动应用程序之前创建您的数据库。

更新 1:

如果您愿意仅在应用程序启动期间创建数据库,那么您可以创建一个新的 Sql 对象并在创建 dataSource bean 之前执行您的查询。例如,在配置文件中,因为在创建 dataSource bean 之前解析配置文件。

try {
    groovy.sql.Sql sql = groovy.sql.Sql.newInstance("jdbc:mysql://localhost:3306", "root", "root", "com.mysql.jdbc.Driver")
    sql.executeUpdate("CREATE DATABASE IF NOT EXISTS MyDB")
} catch (Exception ex) {
}

在您的查询之前使用END;,这样如果有任何交易打开,它就会结束,您的问题就会得到解决。