San*_*Kim 5 postgresql datatypes default-value postgresql-9.6
ALTER TABLE test_table ADD COLUMN a DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)
对比
ALTER TABLE test_table ADD COLUMN a;
Run Code Online (Sandbox Code Playgroud)
NULL如果a未指定列,则将设置两列。
据我所知,如果我将一列添加到生产数据库中具有默认值的表中,则可能会导致用默认值重写所有行时出现问题。
是DEFAULT NULL一样的吗?
Erw*_*ter 10
不,不完全一样。NULL只是数据类型的默认值(原文如此!)。
Postgres 15 附带的所有内置数据类型都NULL默认为1。但这并不一定适用于所有类型。CREATE TYPE并CREATE DOMAIN提供设置任何默认值,除非DEFAULT设置了显式设置,否则该默认值适用于该类型的所有表列。
1除了一个特殊的例外情况:信息模式附带的一种数据类型,通常在模式搜索路径中不可见: information_schema.time_stamp,默认为('now'::text)::timestamp(2) with time zone。
domain用更短的 as来演示。但这同样适用于非域数据类型:
CREATE DOMAIN text_x AS TEXT DEFAULT 'X';
CREATE TABLE tbl (
col_no_default text_x
, col_default text_x DEFAULT NULL
);
Run Code Online (Sandbox Code Playgroud)
的默认值为col_no_default'X',而 的默认col_default值为NULL。
INSERT INTO tbl1 DEFAULT VALUES RETURNING *;
Run Code Online (Sandbox Code Playgroud)
| 列号默认值 | 列默认值 |
|---|---|
| X | 无效的 |
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |