Postgresql

DEFAULT NULL 和“沒有預設值的可空值”完全一樣嗎?

  • October 29, 2019
ALTER TABLE test_table ADD COLUMN a DEFAULT NULL;

對比

ALTER TABLE test_table ADD COLUMN a;

NULL如果a未指定列,則將設置兩列。

據我所知,如果我在生產數據庫中將一列添加到具有預設值的表中,則可能會導致使用預設值重寫所有行的麻煩。

DEFAULT NULL一樣的嗎?

不提供任何預設值或顯式提供 NULL 與基本數據類型完全相同。

添加具有 NULL 預設值的列,不需要重寫整個表。它本質上只是表的元數據更新。

引用自 9.6 手冊

如果沒有DEFAULT子句,這只是元數據更改,不需要立即更新表數據;添加的 NULL 值是在讀出時提供的,而不是


請注意,這在 Postgres 11 中發生了變化。

當您添加具有靜態預設值(例如default 42)的列時,該表也不會被重寫。僅當您提供“易失性”預設值(例如current_timestamp)時,該表才會被重寫。

引用自:https://dba.stackexchange.com/questions/251217