所以我刚刚开始使用 Liquibase,我正在尝试将其添加到已经有 200 多个表数据库设置的现有项目中。我已成功创建现有数据库的changeLog.xml。
但是,我遇到了如何处理 View 的问题。标记的内容包括完全限定的列名称([schema].[table].[column])。这会产生一个问题,因为我希望能够使用 Liquibase 设置同一数据库的不同版本(开发、测试、生产),并且这些数据库将具有不同的名称(例如 application_dev、application_testing、application_product)。如果我使用我的开发数据库创建changeLog.xml,那么我将获得类似于以下 View 的内容:
<createView replaceIfExists="true" viewName="view_clients">
select `application_dev.clients.clientid','application_dev.clients.client_name' from `application_dev`
</createView>
因此,当我使用此更改日志创建 application_testing
数据库时,我收到错误
Error executing SQL CREATE VIEW: Table `application_testing.clients` doesn't exist
那么有没有办法解决这个问题,或者我是否试图让 Liquibase 做一些它不是设计用途的事情?
最佳答案
您可能会考虑使用变更日志顶部的特定于您要部署到的环境的属性,类似于此答案中描述的内容:
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"/>
然后你可以有像这样的changeSets:
<createView replaceIfExists="true" viewName="view_clients">
select `${schemaName}.clients.clientid','${schemaName}.clients.client_name' from `${schemaName}`
</createView>
关于mysql - 从 createView 标记中删除架构名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509615/