【发布时间】:2018-05-22 10:02:12
【问题描述】:
我的 PostgreSQL 9.6 数据库中有一个包含 300 万行的表。此表已经有一个空位图(它有 2 个其他 DEFAULT NULL 字段)。我想向该表添加一个新的布尔可空列。我坚持这两种说法之间的区别:
ALTER TABLE my_table ADD COLUMN my_column BOOLEAN;
ALTER TABLE my_table ADD COLUMN my_column BOOLEAN DEFAULT NULL;
我认为这些说法没有区别,但是:
- 我在文档中找不到任何证据。文档告诉我们,为新列提供
DEFAULT值会使 PostgreSQL 重写所有元组,但我认为这种情况下不正确,因为默认值是NULL。 - 我在这个表的副本上运行了一些测试,第一个语句(没有
DEFAULT NULL)比第二个语句花费了更多的时间。我不明白为什么。
我的问题是:
- PostgreSQL 会为这两个语句使用相同的锁类型 (
ACCESS EXCLUSIVE) 吗? - 如果我使用
DEFAULT NULL,PostgreSQL 是否会重写所有元组以将NULL值添加到每个元组? - 这两种说法有区别吗?
【问题讨论】:
标签: postgresql