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
的唯一變體與上面顯示的形式等效。
從 105 重新啟動一個名為 serial
的序列
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
符合SQL標準,但 AS
、START WITH
、OWNED BY
、OWNER TO
、RENAME TO
和 SET SCHEMA
子句除外,這些是 PostgreSQL 擴充功能。
如果您在文件中發現任何不正確之處、與您使用特定功能的經驗不符或需要進一步澄清之處,請使用此表格來回報文件問題。