如何使用数据类型的默认值作为列默认值?

use*_*317 8 postgresql database-design datatypes ddl

如何为 DDL 中的列指定默认值?我很确定以下方法不久前有效:

CREATE TABLE test
(
  col_1 CHAR(12) NOT NULL,
  col_2 INTEGER  NOT NULL WITH DEFAULT,
  col_3 CHAR(12) NOT NULL WITH DEFAULT
);
Run Code Online (Sandbox Code Playgroud)

我只想定义 DB 应该使用列数据类型的默认值(就像我上面的例子一样),而不是具体指定哪个值。

Erw*_*ter 11

默认的任何新的表列默认值是数据类型的默认值。

数据类型的默认默认值是NULL- Postgres 中所有基本数据类型的情况。但是自定义类型或域允许任何有效值。

手册CREATE TYPE

可以指定默认值,以防用户希望数据类型的列默认为空值以外的其他值。使用DEFAULT关键字指定默认值。(这种默认值可以被DEFAULT附加到特定列的显式子句覆盖。)

手册CREATE DOMAIN

默认表达式将用于任何未为列指定值的插入操作。如果为特定列定义了默认值,它将覆盖与域关联的任何默认值。反过来,域默认值会覆盖与基础数据类型关联的任何默认值。

您只能使用DEFAULT列 in 子句CREATE TABLE来指定不同的默认值。否则,你什么都不做WITH DEFAULT就像您在问题中显示的那样在 Postgres 中无效

复位列默认为默认的数据类型(通常默认NULL),下降的列的指定的默认值。

手册ALTER TABLE

ALTER [ COLUMN ] column_name DROP DEFAULT
Run Code Online (Sandbox Code Playgroud)

NOT NULL约束是相关的,但完全独立。定义NOT NULL且没有自定义DEFAULT(并且类型没有非空默认值)的列要求您为每个INSERT.


旁白:您可能不想char(12)在 Postgres 中使用数据类型。


Len*_*art 5

您应该指定默认值。如果我没记错的话,DEFAULT 应该在 NOT NULL 之前:

CREATE TABLE test
( col_1 CHAR(12) NOT NULL,
  col_2 INTEGER DEFAULT 0 NOT NULL,
  col_3 CHAR(12) DEFAULT '' NOT NULL
);
Run Code Online (Sandbox Code Playgroud)