在 运行 个 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;,这样如果有任何交易打开,它就会结束,您的问题就会得到解决。
以下是 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;,这样如果有任何交易打开,它就会结束,您的问题就会得到解决。