Liquibase,如何在Java中设置默认模式programaticaly

时间:2015-09-24 10:14:37

标签: java postgresql liquibase

我正在尝试在我的应用代码中运行Liquibase。问题是在公共模式中创建了新表ale,如何在我的Postgres中将liquibase指向不同的模式。

    Liquibase liquibase = null;
    Connection connection = null;
    try {

        connection = DB.getConnection();
        liquibase = new Liquibase(CHANGELOG_FILE, new FileSystemResourceAccessor(), new JdbcConnection(connection));

        //change default schema here

        liquibase.update(STAGE);

    } catch (LiquibaseException e) {

    } finally {
        if (connection != null) {
            try {
                connection.rollback();
                connection.close();
            } catch (SQLException e) {

            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您可以使用schemaName属性在变更集中指定架构。因此,您不需要以编程方式编写它。

Here您可以查看您可以执行的每个重构/变更集的官方文档。花一点时间,看看如何指定每个重构的目标模式。

例如,添加列更改集:

<changeSet author="liquibase-docs" id="addColumn-example">
  <addColumn catalogName="cat"
        schemaName="public"
        tableName="person">
    <column name="address" type="varchar(255)"/>
  </addColumn>
</changeSet>

答案 1 :(得分:1)

这可以使用liqubase.database.Database::setDefaultSchema方法完成。例如:

        val dbUrl = "jdbc:h2:~/aviary-db/dev;MODE=MySQL;DATABASE_TO_UPPER=false;IGNORECASE=TRUE;INIT=create schema if not exists aviary;DB_CLOSE_DELAY=-1;TRACE_LEVEL_SYSTEM_OUT=2"
        Connection conn = DriverManager.getConnection(dbUrl, user, password)
        val dbConnection = JdbcConnection(conn)
        val database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(dbConnection)
        database.defaultSchemaName = "schema_name"
        val liquibase = Liquibase("db/db-changelog.xml", ClassLoaderResourceAccessor(), database)
        liquibase.update("")

值得注意的是,您可以使用setLiquibaseSchemaName来确定哪个架构liquibase将用于其内部表databasechangelogdatabasechangeloglock