performance - 在大型 postgres 表上添加具有默认值的 bool 字段

标签 performance postgresql

在某些情况下,我们有一个非常大的表(100万条记录),我们需要向其中添加具有默认值的 bool 字段。 如果我们只添加列,则需要 3 分钟,而我们在同一语句中添加 3 列,则需要相同的时间。

$ALTER TABLE Job ADD COLUMN test BOOLEAN NOT NULL default false;
ALTER TABLE
Time: 186506.603 ms

    $ALTER TABLE Job ADD COLUMN test BOOLEAN NOT NULL default false , 
    ADD COLUMN test1 BOOLEAN NOT NULL default false, 
    ADD COLUMN test2 BOOLEAN NOT NULL default false;
    ALTER TABLE
    Time: 179055.546 ms

我们使用的是 Postgres 9.1 。 postgres 是否有一项功能允许一次性添加多个具有默认值的 bool 字段?这是一个数据库变更管理/升级解决方案。是否比使用临时表复制和插入向表中添加多个具有默认值的 bool 字段更好?此博客中描述了临时表方法: http://blog.codacy.com/2015/05/14/how-to-update-large-tables-in-postgresql/

最佳答案

您已经展示了最好(简单)的方法 - 复合 ALTER TABLE 语句,可一次性添加所有内容。

要在没有长锁的情况下完成此操作,您必须分多个步骤进行。将列添加为可为空,而不使用默认值。添加默认值但使其可为空。 更新所有现有行以添加新值,最好是批量更新。然后最后更改表以添加 not null 约束。

关于performance - 在大型 postgres 表上添加具有默认值的 bool 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672808/

相关文章:

performance - 执行 JDBC 请求时 JMeter 使 XP 崩溃

.net - 软件带宽/数据库增长公式

sql - 给定年份创建的所有表的打印大小

java - 将图像保存到 Postgresql Java

mongodb - NoSQL 是否符合报告软件的要求?

database - 数据库中电子邮件地址的最佳长度是多少?

c++ - OpenMP 2 中的共享 vector

regex - 如何 regex_replace 找到的每个实例?

Javaee、postgresql 和 tomcat

自定义 memstr (strstr) 速度优化