首页 > 解决方案 > 在 PostgresSQL 中将 `int` 迁移到 `bigint` 没有任何停机时间?

问题描述

我有一个数据库,它将遇到 Basecamp 在 11 月著名的整数耗尽问题。我有几个月的时间来弄清楚该怎么做。

迁移此列类型是否有无需停机的主动解决方案?如果是这样,那是什么?如果不是,是否只是消耗停机时间并尽可能迁移色谱柱?

这篇文章是否足够,假设我现在有几天/几周的时间来执行迁移,然后在我用完 id 时被迫这样做?

标签: postgresqldatabase-migrationdowntime

解决方案


使用逻辑复制

使用逻辑复制,您可以在主数据库和备用数据库拥有不同的数据类型。

使用 复制模式pg_dump -s,更改副本上的数据类型,然后开始逻辑复制。

复制所有数据后,将应用程序切换为使用备用。

对于零停机时间,应用程序必须能够重新连接并重试,但这始终是这种情况下的要求。

为此,您需要 PostgreSQL v10 或更高版本,以及您的数据库

  • 不应修改架构,因为不会复制 DDL。
  • 不应使用序列(SERIALIDENTITY),因为不会复制最后使用的值

推荐阅读