Question: Is it possible to create a new DB in a migration script and then connect to it? How?

My Scenario:

I'm trying to use flyway in my Java project (RESTful application using Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink) for managing the changes between different developers which are using git. I wrote my init script and ran it with:

PGPASSWORD='123456' psql -U postgres -f migration/V1__initDB.sql

and it worked fine. The problem is that I can't create new DB with my scripts. when I include the following line in my script:

CREATE DATABASE my_database OWNER postgres ENCODING 'UTF8';

I get this error:

org.postgresql.util.PSQLException: ERROR: CREATE DATABASE cannot run inside a transaction block

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:395)

at com.googlecode.flyway.core.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:230)

at com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:89)

at com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)

at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:252)

at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:250)

at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)

at com.googlecode.flyway.core.command.DbMigrate.applyMigration(DbMigrate.java:250)

at com.googlecode.flyway.core.command.DbMigrate.access$700(DbMigrate.java:47)

at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:189)

at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:138)

at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)

at com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:137)

at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:872)

at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:819)

at com.googlecode.flyway.core.Flyway.execute(Flyway.java:1200)

at com.googlecode.flyway.core.Flyway.migrate(Flyway.java:819)

at ir.chom.MyApp.(MyApp.java:28)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1117)

at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:867)

at org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:814)

at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:906)

at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:898)

at org.glassfish.jersey.server.ApplicationHandler.createApplication(ApplicationHandler.java:300)

at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:279)

at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:302)

at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)

at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)

at javax.servlet.GenericServlet.init(GenericServlet.java:160)

at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)

at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)

at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)

at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)

at java.lang.Thread.run(Thread.java:724)

It seems that this is a problem with JDBC that uses autocommit option. This option can be disabled with something like this:

Connection connection = dataSource.getConnection();

Connection.setAutoCommit(false); // Disables auto-commit.

but I don't know how to pass this option to flyway connection. Also if I solve this I think I will have problem with passing password to \c command.

解决方案

Flyway always operates within the database used in the jdbc connection string.

Once connected, all scripts run within a transaction. As CREATE DATABASE is not supported within transactions, you will not be able to accomplish what you want.

What you can do however, is create a schema instead. Flyway will even do this for you, if you point it at a non-existing one.

flyway java使用,如何使用flyway创建数据库?相关推荐

  1. mysql 使用java代码进行操作系统_【MySQL 05】使用Java对MySQL进行操作(创建数据库)...

    JDBC连接数据库: 1.加载JDBC驱动程序 2.提供JDBC连接的URL 3.创建数据库的连接 4.创建一个Statement 5.执行SQL语句 6.处理结果 7.关闭JDBC对象 1.加载JD ...

  2. Android复习07【创建数据库、insert()插入数据、查看数据库、根据列索引获取参数值、根据列名-返回索引、增删改查数据、数据分页、修改表结构、Room框架】

    2020-04-09-星期四-第八周 目   录 创建数据库 insert()方法 查看数据库(Save as保存) 菜鸟教程---SQLite数据库 根据 列索引 获取 参数值 列比较多---根据列 ...

  3. flyway数据迁移_使用Flyway在Java EE中进行数据库迁移

    flyway数据迁移 任何Java EE应用程序的数据库模式都会随着业务逻辑一起发展. 这使得数据库迁移对于任何Java EE应用程序都很重要. 您是否还在执行应用程序时手动执行它们? 它仍然是一个锁 ...

  4. flyway版本号_Spring Boot 集成 Flyway 实现数据库版本控制

    在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表.在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速 ...

  5. java编写创建数据库和表的程序

    本文示例可见一斑了,主要是通过Java对SQL语句进行操作,和普通的增删改查的原理是一样的: import java.sql.*; public class Test { public static ...

  6. jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序

    jsf netbeans 您需要非常快速地创建数据库前端吗? NetBeans IDE允许人们以很少的代码就为一组数据库表开发JSF应用程序前端. 现在,本教程是一个老歌,但是一个好东西--对于那些不 ...

  7. NetBeans Java EE技巧9:从数据库创建JSF应用程序

    您需要非常快速地创建数据库前端吗? NetBeans IDE允许人们以极少的编码就非常快速地为一组数据库表开发JSF应用程序前端. 现在,本教程既是老歌,又是老歌--对于那些不了解它的人来说,值得再次 ...

  8. Oracle Java Cloud系列(02)——创建Java云的应用服务器实例 及 数据库云实例

    本指南为整个系列的第二篇,介绍如何创建Oracle数据库云服务与Java云服务,文章整体将分为下面三个部分: 第一步:创建服务前准备 - 密钥与云存储容器 第二步:创建数据库云服务 第三步:创建Jav ...

  9. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误

    我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...

最新文章

  1. 2022-2028年中国玻璃纤维毡热塑性塑料(GMT)行业市场研究及前瞻分析报告
  2. 用Python拼图发一个高逼格的朋友圈
  3. Centos-7.4_安装_Redis_4.0.8
  4. 什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!...
  5. 快速上手SpyGlass——CDC检查
  6. MariaDB Spider 数据库分库分表实践 分库分表
  7. python until怎么用_python基础之从认识python到python的使用
  8. mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
  9. C Primer Plus(三)
  10. android 内容提供其,Android内容提供者
  11. 苹果5越狱教程_unc0ver5.2.0安装方法 iOS13.5用Cydia Impactor或AltStore越狱教程
  12. 在线图书销售系统顺序图_苏宁易购网上商城在线购物
  13. c语言写死循环程序,通过简单的例子看c程序死循环
  14. EM30719 i2c不能正常读
  15. 【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...
  16. pyqt5使用pyinstaller打包项目为exe
  17. 用不了chatgpt,试试Claude-Claude注册教程
  18. Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器
  19. 小米华为智能手机未来路不平坦
  20. CMOS信噪比与感光面积的关系

热门文章

  1. YUV 4:2:0 格式和YUV411格式区别
  2. rtmp推流h264+aac
  3. new/delete和malloc/free的区别(举例说明)(简单点)
  4. Failed resolution of: Landroid/support/v7/internal/widget/TintManager;异常解决方法
  5. Thread-方法以及wait、notify简介
  6. React项目动态设置title标题
  7. Ubuntu安装Nginx+PHP5.6+MySQL5.6
  8. 《淘宝店铺装修与促销设计宝典》一6.1 设计全面的店铺客服区
  9. 机房收费系统--准备工作
  10. Java面试题阶段汇总