如何在大型表格上的Postgres中快速更改列类型?

时间:2019-04-02 08:22:31

标签: postgresql

我在Postgresql中有一个非常大的表(亿万行)。它具有整数类型(4个字节)的主键。我需要将此列转换为bigint(8字节整数)。我需要尽快执行此操作,以最大程度地减少此表顶部运行的应用程序的停机时间。

使用ALTER TABLE方法大约需要1个小时或更长时间(仅在本地安装上测试)。我还可以使用转换后的类型(bigint)的列创建一个新表,并使用INSERT INTO A SELECT FROM B复制数据,然后重命名表(以使A <-> B)。会更快吗?还有其他类似的选择会更好吗?

如果这些选项都不是更快,我还可以在应用程序运行期间准备表B,然后在停机期间复制其余的表。您会为该任务推荐什么方法?如何在系统运行期间最好地复制数据,以及如何找到停机期间需要复制的最终差异?使用触发器?还是可能有某种类似复制的机制来完成此任务?甚至是一些软件?

感谢有关如何操作的任何想法。我需要将停机时间最小化到几分钟,并且我需要100%的可靠性(不会丢失任何数据)。

0 个答案:

没有答案