postgresql - 如何重用包含视图代码的变更集
问题描述
问题:
liquibase
我在由changeSets驱动的数据库中有几个视图。
有时我需要重新创建这些视图。原因总是不同:
- 错误
- 需求变更
- 基础表更改
为此,我只需创建一个新的 changeLog 文件并复制粘贴所有包含所有视图代码的 changeSet 并进行必要的修改。
当视图代码更改时 - 没关系 - 不同的更改日志包含不同的视图代码。
然而,有些情况下必须重新创建视图,但视图代码根本没有改变。
例如,表a
和视图b
。
create table a(id int primary key);
create view b as select id from a;
后来,我决定将a.id
列类型更改为bigint
alter table a alter id type bigint
此更改需要b
重新创建视图。所以,现在我必须使用与以前的变更集完全相同的视图代码创建新的变更集。
有什么方法可以避免使用liquibase
andpostgresql
吗?
解决方案
想到了两种解决方案:
1(脏的)。
每个 Liquibase changeSet 都有自己的 ID。您可以打开databasechangelog
表并删除需要重新运行的变更集 ID 的记录。
这样 Liquibase 会认为这些 changeSets 还没有运行,它们将被再次执行。
2(清洁工)。
Liquibase 有一个很好的特性,叫做contexts
(看看这个)。您可以将上下文添加到您可能需要重新运行的变更集(例如recreate-view
)。当您实际上需要重新运行这些更改集时,您始终可以使用选择的recreate-view
.
由于您需要重复执行这些变更集,您可以将runAlways="true"
(查看此链接)添加到这些变更集。这样它们每次都会被执行,并且通过设置所需的内容,context
您可以确定 Liquibase 将处理的 changeLog 的范围。
推荐阅读
- flutter - 颤振子道具正在改变父变量
- python-3.x - 在python中用脚本打开一个程序
- python - 使用 Web3 和 Python 在 Polygon 区块链上检测新的 PairCreated 事件
- css - R Markdown (Flexdashboard) 移动格式
- raspberry-pi - 如何配置 Xen 管理程序以在树莓派 4 的单独显示器(监视器)上显示来宾 VM?
- python - Python金融图表抓取
- apt - APT 标志 --yes 不影响 postinst 中的提示
- javascript - 如何从 req.user 对象中删除键:值对
- javascript - 数据表:通过使用分隔符分隔列来导出表
- javascript - NodeMailer 中的错误 421 并且不发送邮件