[英]DB migration/rollback - PSQL
我在一家小公司担任初级 DevOps 工程师,我们在开发集群中部署了一个应用程序(微服务架构)。
我们已经构建了一个良好的 CI/CD 管道,您可以在其中执行构建、单元测试、构建 docker 映像、功能测试和部署等步骤。
现在,我正在尝试添加步骤来测试PSQL数据库的迁移和回滚。 为此,我们正在使用Liquibase 。
您可能知道, liquibase与迁移和回滚脚本以及需要处理数据集成的脚本一起使用(数据不会丢失或从一个版本添加到另一个版本)。 这将确保我可以在任何时候进行更新/回滚,即使在生产中也是如此。
在这种情况下,我假设我有以下 tableA(数据库模式 version_0.0.0):
+------+--------+
| id | id_2 |
+------+--------+
| 1 | 1 |
+------+--------+
| 1 | 2 |
+------+--------+
| 1 | 3 |
+------+--------+
| 1 | 4 |
+------+--------+
其中 PRIMARY KEY 称为“tablea_pkey”,由 tableA (id, id_2) 组成
我需要将数据库模式升级到以下(version_1.0.0):
+------+--------+--------+
| id | id_2 | id_3 |
+------+--------+--------+
| 1 | 1 | 1 |
+------+--------+--------+
| 1 | 2 | 1 |
+------+--------+--------+
| 1 | 3 | 1 |
+------+--------+--------+
| 1 | 4 | 1 |
+------+--------+--------+
PRIMARY KEY 将被称为“tablea_pkey”并将由 tableA (id, id_2, id_3) 组成。
对于迁移脚本,我有以下内容:
ALTER TABLE tableA add column third_id BIGINT NOT NULL DEFAULT 1;
ALTER TABLE tableA DROP CONSTRAINT tablea_pkey;
ALTER TABLE ONLY tableA ADD CONSTRAINT "tablea_pkey" PRIMARY KEY (id, id_2, id_3);
然而,对于我的回滚脚本,事情变得有点困难,因为它需要确保它处理数据集成!
如果表的更新版本投入生产(应用程序代码也已更改)并且此值进入新表:
+------+--------+--------+
| id | id_2 | id_3 |
+------+--------+--------+
| 1 | 1 | 1 |
+------+--------+--------+
| 1 | 2 | 1 |
+------+--------+--------+
| 1 | 3 | 1 |
+------+--------+--------+
| 1 | 4 | 1 |
+------+--------+--------+
| 1 | 4 | 2 |
+------+--------+--------+
我的脚本应该如何恢复到以前的版本? 当然,如果我尝试回滚到 primary_key(id, id_2) 会引发错误,因为我将在表上重复值....
你们能告诉我如何在不丢失任何数据的情况下编写回滚脚本吗?
如果您确定,将来需要回滚,更好的解决方案是使用 pg_dump 备份表或在数据库中创建备份表。
在此之后,进行主键更改,以便将来您可以轻松地恢复到您进行更改的时间。
无论如何,如果您正在回滚,任何新数据也将被回滚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.