Postgresql
DEFAULT NULL 和“沒有預設值的可空值”完全一樣嗎?
ALTER TABLE test_table ADD COLUMN a DEFAULT NULL;
對比
ALTER TABLE test_table ADD COLUMN a;
NULL
如果a
未指定列,則將設置兩列。據我所知,如果我在生產數據庫中將一列添加到具有預設值的表中,則可能會導致使用預設值重寫所有行的麻煩。
是
DEFAULT NULL
一樣的嗎?
不提供任何預設值或顯式提供 NULL 與基本數據類型完全相同。
添加具有 NULL 預設值的列,不需要重寫整個表。它本質上只是表的元數據更新。
如果沒有
DEFAULT
子句,這只是元數據更改,不需要立即更新表數據;添加的 NULL 值是在讀出時提供的,而不是請注意,這在 Postgres 11 中發生了變化。
當您添加具有靜態預設值(例如
default 42
)的列時,該表也不會被重寫。僅當您提供“易失性”預設值(例如current_timestamp
)時,該表才會被重寫。