2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4

5.2. 預設值 #

列可以被指定一個預設值。當建立新行時,如果沒有為某些列指定值,那些列將用它們各自的預設值填充。資料操作命令也可以明確地要求一列被設定為其預設值,而無需知道該值是什麼。(有關資料操作命令的詳細資訊,請參見 第 6 章。)

如果沒有明確宣告預設值,則預設值為 null 值。這通常是有意義的,因為 null 值可以被視為表示未知資料。

在表定義中,預設值列在列資料型別之後。例如

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric DEFAULT 9.99
);

預設值可以是一個表示式,該表示式將在每次插入預設值時進行求值(在建立表時 求值)。一個常見的例子是為 timestamp 列設定一個預設值為 CURRENT_TIMESTAMP,以便在行插入時將其設定為時間。另一個常見的例子是為每一行生成一個“序列號”。在 PostgreSQL 中,這通常透過類似以下的方式實現:

CREATE TABLE products (
    product_no integer DEFAULT nextval('products_product_no_seq'),
    ...
);

其中 nextval() 函式從一個序列物件(參見 第 9.17 節)提供連續的值。這種安排非常常見,以至於有一個特殊的簡寫方式:

CREATE TABLE products (
    product_no SERIAL,
    ...
);

SERIAL 簡寫方式在 第 8.1.4 節 中有更詳細的討論。

提交更正

如果您在文件中發現任何不正確之處,與您在使用特定功能時的經驗不符,或者需要進一步澄清,請使用 此表單 報告文件問題。