在某些情况下,我们有一个非常大的表(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/