ALTER SEQUENCE — 更改序列生成器的定義
ALTER SEQUENCE [ IF EXISTS ]name
[ ASdata_type
] [ INCREMENT [ BY ]increment
] [ MINVALUEminvalue
| NO MINVALUE ] [ MAXVALUEmaxvalue
| NO MAXVALUE ] [ [ NO ] CYCLE ] [ START [ WITH ]start
] [ RESTART [ [ WITH ]restart
] ] [ CACHEcache
] [ 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 BY
是可選的。正值將建立升序序列,負值將建立降序序列。如果未指定,則將保持舊的遞增值。increment
minvalue
NO MINVALUE
可選子句 MINVALUE
確定序列可以生成的最小值。如果指定了 minvalue
NO MINVALUE
,則升序和降序序列將分別使用 1 和資料型別的最小值作為預設值。如果未指定這兩個選項中的任何一個,則將保持當前的最小值。
maxvalue
NO MAXVALUE
可選子句 MAXVALUE
確定序列的最大值。如果指定了 maxvalue
NO MAXVALUE
,則升序和降序序列將分別使用資料型別的最大值和 -1 作為預設值。如果未指定這兩個選項中的任何一個,則將保持當前的最大值。
CYCLE
可選關鍵字 CYCLE
可用於啟用序列在升序序列達到 maxvalue
或降序序列達到 minvalue
時進行迴圈。如果達到限制,下一個生成的數字將分別是 minvalue
或 maxvalue
。
NO CYCLE
如果指定了可選關鍵字 NO CYCLE
,那麼在序列達到最大值後呼叫 nextval
將會返回錯誤。如果未指定 CYCLE
或 NO CYCLE
,則將保持舊的迴圈行為。
start
可選子句 START WITH
更改序列記錄的起始值。這不會影響 當前 序列值;它只是設定未來 start
ALTER SEQUENCE RESTART
命令將使用的值。
重啟
可選子句 RESTART [ WITH
更改序列的當前值。這類似於使用 restart
]is_called
= false
呼叫 setval
函式:指定的值將由 nextval
的 下一次 呼叫返回。編寫不帶 restart
值的 RESTART
等同於提供由 CREATE SEQUENCE
記錄或上次由 ALTER SEQUENCE START WITH
設定的起始值。
與 setval
呼叫相比,對序列執行 RESTART
操作是事務性的,並且會阻止併發事務從同一序列獲取數字。如果這不是期望的操作模式,則應使用 setval
。
快取
子句 CACHE
允許預先分配序列號並將其儲存在記憶體中以加快訪問速度。最小值是 1(一次只能生成一個值,即無快取)。如果未指定,則將保持舊的快取值。cache
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 的擴充套件。
如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。