Dan*_*ary 54 schema postgresql migration best-practices deployment
如何在不停机的情况下对实时数据库进行架构更改?
例如,假设我有一个 PostgreSQL 数据库,其中包含一个包含各种用户数据(如电子邮件地址等)的表,所有这些数据都与特定用户相关联。如果我想将电子邮件地址移动到一个新的专用表,我必须更改架构,然后将电子邮件数据迁移到新表。如何在不停止写入原始表的情况下完成此操作?当然,当数据从旧表写入新表时,新数据会继续写入旧表而被遗漏,对吗?
我想这个问题经常出现,但我找不到任何标准的解决方案来处理它。
这篇文章解决了这个问题,但我并没有真正理解第3步。他说要写入两个表,然后将旧数据从第一个表迁移到新表。您如何确保只迁移旧数据?
(我在 Heroku 上使用PostgreSQL。)
Erw*_*ter 31
你几乎已经有了答案:
至于第 3 步,使用这样的东西(在一笔交易中):
插入尚不存在的内容:
INSERT INTO new_tbl (old_id, data)
SELECT old_id, data
FROM old_tbl
WHERE NOT EXISTS (SELECT * FROM new_tbl WHERE new_tbl.old_id = old_tbl.old_id);
Run Code Online (Sandbox Code Playgroud)
更新在此期间发生的变化:
UPDATE new_tbl
SET data = old.data
USING old_tbl
WHERE new_tbl.old_id = old_tbl.old_id
AND new_tbl.data IS DISTINCT FROM old_tbl.data;
Run Code Online (Sandbox Code Playgroud)
不会触及新数据,因为它在两个地方都是相同的。
归档时间: |
|
查看次数: |
25593 次 |
最近记录: |