本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ALTER SEQUENCE
ALTER SEQUENCE — 變更序列產生器的定義。
重要
使用序列時,應仔細考慮快取值。如需詳細資訊,請參閱 CREATE SEQUENCE 頁面上的重要標註。
如需如何根據工作負載模式以最佳方式使用序列的指引,請參閱 使用序列和身分資料欄。
支援的語法
ALTER SEQUENCE [ IF EXISTS ] name [ 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 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 where cache is 1 or cache >= 65536
Description
ALTER SEQUENCE 會變更現有序列產生器的參數。ALTER SEQUENCE 命令中未特別設定的任何參數都會保留其先前的設定。
您必須擁有序列才能使用 ALTER SEQUENCE。若要變更序列的結構描述,您還必須具有新結構描述CREATE的權限。若要更改擁有者,您必須能夠SET ROLE使用新的擁有角色,且該角色必須具有序列結構描述CREATE的權限。(這些限制會強制變更擁有者不會執行您捨棄並重新建立序列而無法執行的任何動作。 不過,超級使用者可以改變任何序列的擁有權。)
Parameters
name-
要變更之序列的名稱 (選擇性符合結構描述資格)。
IF EXISTS-
如果序列不存在,請勿擲回錯誤。在此情況下會發出通知。
增量-
子句
INCREMENT BY是選用的。正值將使遞增序列,負值將遞減序列。如果未指定,則會維持舊的增量值。increment minvalue/NO MINVALUE-
選用子句
MINVALUE決定序列可以產生的最小值。如果minvalueNO MINVALUE指定 ,則會分別使用 1 的預設值和遞增和遞減序列的資料類型最小值。如果未指定任何選項,則會維持目前的最小值。 maxvalue/NO MAXVALUE-
選用子句
MAXVALUE決定序列的最大值。如果maxvalueNO MAXVALUE指定 ,則會分別使用資料類型的最大值預設值和遞增和遞減序列的 -1。如果未指定任何選項,則會維持目前的最大值。 CYCLE-
當遞增或遞減序列分別達到
最大值或最小值時,選用CYCLE的關鍵字可用來讓序列包裝。如果達到限制,產生的下一個數字將分別是最小值或最大值。 NO CYCLE-
如果指定選用
NO CYCLE關鍵字,則在序列達到其最大值nextval之後對 的任何呼叫都會傳回錯誤。如果未指定CYCLE或NO CYCLE,則會維持舊的週期行為。 start-
選用子句會
START WITH變更序列的記錄開始值。這不會影響目前的序列值;它只會設定未來startALTER SEQUENCE RESTART命令將使用的值。 重新啟動-
選用子句會
RESTART [ WITH變更序列的目前值。這類似於使用restart]is_called= 呼叫setval函數false:下次呼叫 會傳回指定的值nextval。沒有重新啟動值RESTART的寫入相當於提供由 記錄的開始值CREATE SEQUENCE,或由 上次設定ALTER SEQUENCE START WITH。與
setval呼叫相反,序列上的RESTART操作是交易的,並封鎖並行交易從相同序列取得數字。如果這不是所需的操作模式,setval則應使用 。 快取-
子句
CACHE可讓序號預先配置並存放在記憶體中,以加快存取速度。值必須為 1 或某個值 >= 65536。如果未指定,則會保留舊快取值。如需快取行為的詳細資訊,請參閱 下的指引CREATE SEQUENCE。cache OWNED BY/table_name.column_nameOWNED BY NONE-
OWNED BY選項會導致序列與特定資料表資料欄相關聯,因此如果捨棄該資料欄 (或其整個資料表),序列也會自動捨棄。如果指定,此關聯會取代先前為序列指定的任何關聯。指定的資料表必須具有相同的擁有者,且與序列位於相同的結構描述中。指定 會OWNED BY NONE移除任何現有的關聯,使序列「獨立」。 new_owner-
序列新擁有者的使用者名稱。
new_name-
序列的新名稱。
new_schema-
序列的新結構描述。
備註
ALTER SEQUENCE 除了目前已預先配置 (快取) 序列值的後端之外, 不會立即影響後端nextval的結果。在注意到已變更的序列產生參數之前,他們會先用完所有快取的值。目前的後端會立即受到影響。
ALTER SEQUENCE 不會影響序列currval的狀態。
ALTER SEQUENCE 可能會導致其他交易進入 OCC。
基於歷史原因, 也可以與序列ALTER TABLE搭配使用;但唯一允許與序列搭配使用ALTER TABLE的變體等同於上述表單。
範例
在 105 serial重新啟動名為 的序列:
ALTER SEQUENCE serial RESTART WITH 105;
相容性
ALTER SEQUENCE 符合 SQL 標準,但 AS、、RENAME TO、、 START WITH OWNED BY OWNER TO和 SET SCHEMA子句除外,其為 PostgreSQL 擴充功能。