当前位置: 首页 > 知识库问答 >
问题:

我的databaseChangeLog层次结构有意义吗?

韩季
2023-03-14

我们希望用LiquiBase取代各种土生土长的和手工的数据库部署过程。我们有几十个数据库,我们希望最终使用liquibase。许多数据库中已经有数百个对象。

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
	<include file="migrations/_tables.xml" relativeToChangelogFile="true"/>
	<include file="migrations/_triggers.xml" relativeToChangelogFile="true"/>
	<include file="migrations/_views.xml" relativeToChangelogFile="true"/>
	<include file="migrations/_stored_procedures.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

因此,当迁移运行时,它将首先在tables.xml中进行模式更改,然后在triggers.xml中进行触发器,以此类推。

triggers.xml databaseChangeLog如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
	<changeSet id="tr_names_delete" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_delete.sql" relativeToChangelogFile="true" /> </changeSet>
	<changeSet id="tr_names_insert" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_insert.sql" relativeToChangelogFile="true" /> </changeSet>
	<changeSet id="tr_names_update" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_update.sql" relativeToChangelogFile="true" /> </changeSet>
</databaseChangeLog>

我为每个对象设置了一个更改。为了能够跟踪DATABASECHANGELOG表中随时间变化的情况,我使用对象名作为变更集的ID,使用JIRA问题作为作者。因此ID会随着时间的推移保持不变,但开发人员会在每次更改对象时更新作者。存储过程、视图等都可以随时间更新和重新运行的databaseChangeLogs遵循相同的形式。

共有1个答案

阎宾实
2023-03-14
  • LogicalFilePath添加到更改日志中,以便在使用不同类路径执行更改日志时在databasechangelog中具有相同的路径
  • 我不会将runallways=true用于过程。想象一下当你想要回到以前的版本时的情形。最好(imho)只追加更改日志,并使用指向以前版本回滚
  • 有时类型之间可能存在依赖关系(触发器中的视图、过程中的函数、...)。因此,您在主变更日志中指定的执行顺序将不起作用。但是可以将这些更改添加到单独的changelog中(例如uncategorized-changes.xml)。
  • 如果要支持多种数据库类型,请做好准备,因为您需要对某些功能进行一些配置(例如sysdatevsnow()vscurrent_date...)。为此,准备一些文件,将这些html" target="_blank">配置定义为属性,然后将该文件包含在主变更日志中。

在其他方面,您的变更日志看起来还可以。

 类似资料:
  • 在Tableau中,可以构建层次结构以可视化数据。可以通过以下步骤在Tableau中创建它: 例如,考虑数据源,例如Sample-Superstore,以及它的维度和度量。 第1步: 首先转到工作表。然后, 选择一个维度,然后右键单击该维度以创建层次结构。 转到“层次结构(Hierarchy)”选项。 并且,单击下面屏幕截图中显示的“创建层次结构(Create Hierarchy)”选项。 第2步

  • 零售商店的正确模式是什么?公司从商店销售产品。 这似乎违反了我对OOP所知的全部知识。通过层次结构向下传递数据的方法--在对象之间复制参数?我错过了什么?

  • 本规范定义了一个用于部署和打包用途的,可存在于开放文件系统、归档文件或一些其他形式中的层次结构。建议 servlet 容器支持这种结构作为运行时表示形式,但不是必须的.

  • 我有这样的层次结构: 因此,用户可以添加他的工作经验。此外,他还可以为特定的项目添加角色。 我想为用户id 1获取项目,但项目之间只有关系 获取用户 获得工作经验 获取角色 获取项目 因此,如果我有更多不同工作经验的角色,我就必须提出20个请求才能得到我的项目。这不是很有效率吗?我必须加载一些不必要的数据。。。 是否可以只创建endpoint:并按用户ID过滤它? 应该如何在API上管理它?对我来

  • FreeBSD 的完整源代码都可以从我们公开的代码库中获取。 源代码通常会安装到 /usr/src 目录中, 它包括了下面这些目录: 目录 说明 bin/ 在 /bin 中的文件的源代码 cddl/ 采用 Common Development and Distribution License 的工具 contrib/ 由其他开发组织维护的源代码 crypto/ 与密码学有关的源代码 etc/ 在

  • 我们正在创建一个REST API,目前我们有两种方法来定义资源。 基本上,我们有、和,其中一个有n个和一个有n个。 分层方法 该层次结构在URI中可见 要搜索所有图像,我们需要一个搜索资源 平进路 我们还需要考虑移动和修改。