ALTER SEQUENCE — 變更序列產生器的定義
ALTER SEQUENCE [ IF EXISTS ]name
[ ASdata_type
] [ INCREMENT [ BY ]increment
] [ MINVALUEminvalue
| NO MINVALUE ] [ MAXVALUEmaxvalue
| NO MAXVALUE ] [ START [ WITH ]start
] [ RESTART [ [ WITH ]restart
] ] [ CACHEcache
] [ [ 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 TOnew_name
ALTER SEQUENCE [ IF EXISTS ]name
SET SCHEMAnew_schema
ALTER SEQUENCE
變更現有序列產生器的參數。任何未在 ALTER SEQUENCE
命令中明確設定的參數,都會保留其先前的設定。
您必須擁有序列才能使用 ALTER SEQUENCE
。若要變更序列的綱要,您也必須在新綱要上擁有 CREATE
權限。若要變更擁有者,您必須能夠 SET ROLE
為新的擁有角色,且該角色必須在序列的綱要上擁有 CREATE
權限。(這些限制確保變更擁有者不會執行任何您無法透過刪除並重新建立序列來執行的動作。然而,超級使用者無論如何都可以變更任何序列的擁有權。)
name
要變更的序列名稱(可選擇加上綱要限定詞)。
IF EXISTS
如果序列不存在,請勿拋出錯誤。在這種情況下,會發出通知。
data_type
選擇性子句 AS
變更序列的資料類型。有效的類型為 data_type
smallint
、integer
和 bigint
。
如果且僅當先前的最小值和最大值是舊資料類型的最小值或最大值時(換句話說,如果序列是使用 NO MINVALUE
或 NO 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
允許預先配置序列號碼並儲存在記憶體中,以加快存取速度。最小值為 1(一次只能產生一個值,即沒有快取)。如果未指定,則會維持舊的快取值。cache
CYCLE
選擇性的 CYCLE
關鍵字可用於在遞增或遞減序列分別達到 maxvalue
或 minvalue
時,啟用序列環繞。如果達到限制,則產生的下一個數字將分別為 minvalue
或 maxvalue
。
NO CYCLE
如果指定了選擇性的 NO CYCLE
關鍵字,則在序列達到其最大值後,任何對 nextval
的呼叫都會傳回錯誤。如果未指定 CYCLE
或 NO 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
序列的新綱要。
ALTER SEQUENCE
不會立即影響已預先分配(快取)序列值的後端(除了目前的後端)中的 nextval
結果。 它們會在注意到變更的序列產生參數之前,用完所有快取的值。 目前的後端將會立即受到影響。
ALTER SEQUENCE
不會影響序列的 currval
狀態。(在 PostgreSQL 8.3 之前,它有時會影響。)
ALTER SEQUENCE
會封鎖並行的 nextval
、currval
、lastval
和 setval
呼叫。
由於歷史原因,ALTER TABLE
也可以與序列一起使用;但唯一允許與序列一起使用的 ALTER TABLE
變體等同於上面顯示的形式。
重新啟動名為 serial
的序列,從 105 開始
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
符合SQL標準,但 AS
、START WITH
、OWNED BY
、OWNER TO
、RENAME TO
和 SET SCHEMA
子句除外,它們是 PostgreSQL 擴充功能。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表格回報文件問題。