所以我刚开始使用Liquibase,我试图将它添加到已经拥有200多个表数据库设置的现有项目中。我已经成功创建了现有数据库的changeLog.xml。
但是,我遇到了如何处理视图的问题。标记的内容包括完全限定的列名([schema]。[table]。[column])。这会产生问题,因为我希望能够使用Liquibase来设置同一数据库的不同版本(开发,测试,生产),并且这些数据库将具有不同的名称(例如application_dev,application_testing,application_production) 。如果我使用我的开发数据库创建changeLog.xml,那么我将获得类似于以下内容的视图:
<createView replaceIfExists="true" viewName="view_clients">
select `application_dev.clients.clientid','application_dev.clients.client_name' from `application_dev`
</createView>
因此,当我使用此changeLog创建application_testing
数据库时,我收到错误
Error executing SQL CREATE VIEW: Table `application_testing.clients` doesn't exist
那么有没有解决这个问题的方法,或者我是否想让Liquibase做一些它没有设计的东西?
答案 0 :(得分:1)
您可能会考虑使用更改日志顶部的属性,这些属性特定于您要部署的环境,类似于此答案中描述的内容:
Database Migration with Liquibase using different DBMS
在您的情况下,不是使用值取决于dbms的属性,而是可以根据上下文使用其值不同的属性,这是针对此类问题而设计的Liquibase概念。
因此,更改日志顶部的属性可能如下所示:
<property name="schemaName" value="application_dev" context="dev"/>
<property name="schemaName" value="application_test" context="test"/>
<property name="schemaName" value="application_prod" context="production"/>
然后你就可以拥有这样的changeets:
<createView replaceIfExists="true" viewName="view_clients">
select `${schemaName}.clients.clientid','${schemaName}.clients.client_name' from `${schemaName}`
</createView>