从createView标签中删除模式名称



所以我刚刚开始使用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

那么,是否有一种方法可以解决这个问题,或者我是否试图让liquubase做一些它没有设计的事情?

您可以考虑在变更日志的顶部使用特定于您所部署的环境的属性,类似于以下答案所描述的内容:

使用不同的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"/>

那么你可以有这样的更改集:

<createView replaceIfExists="true" viewName="view_clients">
  select `${schemaName}.clients.clientid','${schemaName}.clients.client_name' from `${schemaName}`
</createView>

相关内容

  • 没有找到相关文章

最新更新