我正在尝试在我的应用代码中运行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) {
}
}
}
答案 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将用于其内部表databasechangelog
和databasechangeloglock
。