支援版本:目前版本 (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

序列的新綱要。

注意事項

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

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

ALTER SEQUENCE 會阻止並行的 nextvalcurrvallastvalsetval 呼叫。

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

範例

從 105 重新啟動一個名為 serial 的序列

ALTER SEQUENCE serial RESTART WITH 105;

相容性

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

提交更正

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