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

ALTER SEQUENCE

ALTER SEQUENCE — 更改序列生成器的定義

概要

ALTER SEQUENCE [ IF EXISTS ] name
    [ AS data_type ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ]
    [ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name SET { LOGGED | UNLOGGED }
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

描述

ALTER SEQUENCE 用於更改現有序列生成器的引數。在 ALTER SEQUENCE 命令中未特別設定的任何引數將保留其先前設定。

您必須擁有該序列才能使用 ALTER SEQUENCE。要更改序列的模式,您還必須在新模式上擁有 CREATE 許可權。要更改所有者,您必須能夠 SET ROLE 為新的擁有角色,並且該角色必須對序列的模式擁有 CREATE 許可權。(這些限制確保了更改所有者不會執行您透過刪除和重新建立序列無法完成的操作。但是,超級使用者可以更改任何序列的所有權。)

引數

name

要更改的序列的名稱(可選的模式限定)。

IF EXISTS

如果序列不存在,則不引發錯誤。在這種情況下,將發出通知。

data_type

可選子句 AS data_type 更改序列的資料型別。有效型別為 smallintintegerbigint

資料型別的更改會自動更改序列的最小值和最大值,僅當先前的最小值和最大值是舊資料型別的最小值或最大值時(換句話說,如果序列是使用 NO MINVALUENO MAXVALUE 建立的,無論是隱式還是顯式)。否則,最小值和最大值將得以保留,除非在同一命令中提供了新值。如果最小值和最大值不適合新資料型別,將生成錯誤。

遞增量

子句 INCREMENT BY increment 是可選的。正值將建立升序序列,負值將建立降序序列。如果未指定,則將保持舊的遞增值。

minvalue
NO MINVALUE

可選子句 MINVALUE minvalue 確定序列可以生成的最小值。如果指定了 NO MINVALUE,則升序和降序序列將分別使用 1 和資料型別的最小值作為預設值。如果未指定這兩個選項中的任何一個,則將保持當前的最小值。

maxvalue
NO MAXVALUE

可選子句 MAXVALUE maxvalue 確定序列的最大值。如果指定了 NO MAXVALUE,則升序和降序序列將分別使用資料型別的最大值和 -1 作為預設值。如果未指定這兩個選項中的任何一個,則將保持當前的最大值。

CYCLE

可選關鍵字 CYCLE 可用於啟用序列在升序序列達到 maxvalue 或降序序列達到 minvalue 時進行迴圈。如果達到限制,下一個生成的數字將分別是 minvaluemaxvalue

NO CYCLE

如果指定了可選關鍵字 NO CYCLE,那麼在序列達到最大值後呼叫 nextval 將會返回錯誤。如果未指定 CYCLENO CYCLE,則將保持舊的迴圈行為。

start

可選子句 START WITH start 更改序列記錄的起始值。這不會影響 當前 序列值;它只是設定未來 ALTER SEQUENCE RESTART 命令將使用的值。

重啟

可選子句 RESTART [ WITH restart ] 更改序列的當前值。這類似於使用 is_called = false 呼叫 setval 函式:指定的值將由 nextval下一次 呼叫返回。編寫不帶 restart 值的 RESTART 等同於提供由 CREATE SEQUENCE 記錄或上次由 ALTER SEQUENCE START WITH 設定的起始值。

setval 呼叫相比,對序列執行 RESTART 操作是事務性的,並且會阻止併發事務從同一序列獲取數字。如果這不是期望的操作模式,則應使用 setval

快取

子句 CACHE cache 允許預先分配序列號並將其儲存在記憶體中以加快訪問速度。最小值是 1(一次只能生成一個值,即無快取)。如果未指定,則將保持舊的快取值。

SET { LOGGED | UNLOGGED }

此形式將序列從未記錄更改為已記錄或反之(請參閱 CREATE SEQUENCE)。它不能應用於臨時序列。

OWNED BY table_name.column_name
OWNED BY NONE

OWNED BY 選項使序列與特定表列關聯,這樣,如果該列(或其整個表)被刪除,序列也將被自動刪除。如果指定,此關聯將替換序列的任何先前指定的關聯。指定的表必須與序列具有相同的擁有者,並且位於同一個模式下。指定 OWNED BY NONE 將刪除任何現有的關聯,使序列成為獨立的。

new_owner

新序列所有者的使用者名稱。

new_name

序列的新名稱。

new_schema

序列的新模式。

註釋

ALTER SEQUENCE 不會立即影響當前後端以外的其他後端的 nextval 結果,這些後端已預先分配(快取)了序列值。它們將用完所有快取的值,然後才會注意到序列生成引數的更改。當前後端將立即受到影響。

ALTER SEQUENCE 不會影響序列的 currval 狀態。(在 PostgreSQL 8.3 之前,它有時會。)

ALTER SEQUENCE 會阻止併發的 nextvalcurrvallastvalsetval 呼叫。

出於歷史原因,ALTER TABLE 也可以與序列一起使用;但是,ALTER TABLE 允許與序列一起使用的唯一形式等同於上述形式。

示例

重啟名為 serial 的序列,設定為 105

ALTER SEQUENCE serial RESTART WITH 105;

相容性

ALTER SEQUENCE 符合SQL標準,除了 ASSTART WITHOWNED BYOWNER TORENAME TOSET SCHEMA 子句,這些是 PostgreSQL 的擴充套件。

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。