支援的版本:目前 (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 ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ] [ [ NO ] CYCLE ]
    [ 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

選擇性子句 INCREMENT BY increment。正值會產生遞增序列,負值會產生遞減序列。如果未指定,則會維持舊的增量值。

minvalue
NO MINVALUE

選擇性子句 MINVALUE minvalue 決定序列可以產生的最小值。如果指定 NO MINVALUE,則遞增和遞減序列的預設值將分別為 1 和資料類型的最小值。如果未指定任何選項,則會維持目前的最小值。

maxvalue
NO MAXVALUE

選擇性子句 MAXVALUE maxvalue 決定序列的最大值。如果指定 NO MAXVALUE,則遞增和遞減序列的預設值將分別為資料類型的最大值和 -1。如果未指定任何選項,則會維持目前的最大值。

start

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

restart

選擇性子句 RESTART [ WITH restart ] 變更序列的目前值。這類似於呼叫 setval 函數,並將 is_called 設為 false:指定的值將由 nextval下一次呼叫傳回。撰寫不含 restart 值的 RESTART 相當於提供 CREATE SEQUENCE 記錄的起始值,或是最後由 ALTER SEQUENCE START WITH 設定的值。

setval 呼叫相反,序列上的 RESTART 操作具有交易性,並阻止並行交易從同一個序列取得數字。如果這不是所需的操作模式,則應使用 setval

cache

子句 CACHE cache 允許預先配置序列號碼並儲存在記憶體中,以加快存取速度。最小值為 1(一次只能產生一個值,即沒有快取)。如果未指定,則會維持舊的快取值。

CYCLE

選擇性的 CYCLE 關鍵字可用於在遞增或遞減序列分別達到 maxvalueminvalue 時,啟用序列環繞。如果達到限制,則產生的下一個數字將分別為 minvaluemaxvalue

NO CYCLE

如果指定了選擇性的 NO CYCLE 關鍵字,則在序列達到其最大值後,任何對 nextval 的呼叫都會傳回錯誤。如果未指定 CYCLENO CYCLE,則會維持舊的循環行為。

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

序列的新綱要。

Notes

ALTER SEQUENCE 不會立即影響已預先分配(快取)序列值的後端(除了目前的後端)中的 nextval 結果。 它們會在注意到變更的序列產生參數之前,用完所有快取的值。 目前的後端將會立即受到影響。

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

ALTER SEQUENCE 會封鎖並行的 nextvalcurrvallastvalsetval 呼叫。

由於歷史原因,ALTER TABLE 也可以與序列一起使用;但唯一允許與序列一起使用的 ALTER TABLE 變體等同於上面顯示的形式。

Examples

重新啟動名為 serial 的序列,從 105 開始

ALTER SEQUENCE serial RESTART WITH 105;

Compatibility

ALTER SEQUENCE 符合SQL標準,但 ASSTART WITHOWNED BYOWNER TORENAME TOSET SCHEMA 子句除外,它們是 PostgreSQL 擴充功能。

Submit correction

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表格回報文件問題。