首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DB迁移/回滚- PSQL

DB迁移/回滚- PSQL
EN

Stack Overflow用户
提问于 2019-11-14 16:21:09
回答 1查看 2.6K关注 0票数 0

简介

我是一家小公司的初级DevOps工程师,我们在一个开发集群中部署了一个应用程序(Microservices )。

我们已经建立了一个良好的CI/CD管道,在这里您可以进行构建、单元测试、构建坞映像、功能测试和部署等步骤。

现在,我正在尝试添加一些步骤来测试PSQL dataBase的迁移和回滚。为此,我们正在使用Liquibase

您可能知道,液化基使用迁移和回滚脚本,而这些脚本需要处理数据集成(数据不能从一个版本丢失或添加到另一个版本)。这将确保我可以在任何时候进行更新/回滚,甚至在生产中也是如此。

测试用例

在本例中,我假设我有以下tableA (DB模式version_0.0.0):

代码语言:javascript
运行
复制
+------+--------+
|  id  |  id_2  |
+------+--------+
| 1    | 1      |
+------+--------+
| 1    | 2      |
+------+--------+
| 1    | 3      |
+------+--------+
| 1    | 4      |
+------+--------+

其中主键称为"tablea_pkey“,由tableA (id,id_2)组成。

我需要将DB模式升级到以下内容(version_1.0.0):

代码语言:javascript
运行
复制
+------+--------+--------+
|  id  |  id_2  |  id_3  |
+------+--------+--------+
| 1    | 1      | 1      |
+------+--------+--------+
| 1    | 2      | 1      |
+------+--------+--------+
| 1    | 3      | 1      |
+------+--------+--------+
| 1    | 4      | 1      |
+------+--------+--------+

其中主键将被称为"tablea_pkey“,并将由tableA (id、id_2、id_3)组成。

对于迁移脚本,我有以下内容:

代码语言:javascript
运行
复制
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);

然而,对于我的回滚脚本,一些东西变得有点困难,因为它需要确保它处理数据集成!

如果表的更新版本进入生产阶段(应用程序代码也发生了更改),并且该值进入新表:

代码语言:javascript
运行
复制
+------+--------+--------+
|  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),会引发一个错误,因为我将在表上有重复的值.

发问

你们能告诉我如何在不丢失任何数据的情况下编写回滚脚本吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 17:03:08

如果您确信将来需要回滚,更好的解决方案是使用pg_dump或在数据库中创建备份表。

在此之后,执行主键更改,以便以后您可以轻松地恢复到进行更改的时间。

无论如何,如果您正在回滚,任何新的数据也将被回滚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58861351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档