Liquibase,如何在 Java 中以编程方式设置默认架构

Liquibase, how to set default schema programmatically in Java

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

    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) {

            }
        }
    }

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

Here 您可以查看官方文档,了解您可以做的每一项 refactor/changeset。花点时间看看如何指定每个重构的目标模式。

例如,添加列变更集:

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

这可以使用 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.

的模式