?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
ALTER SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ RESTART [ [ WITH ] restart ] ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ] ALTER SEQUENCE name OWNER TO new_owner ALTER SEQUENCE name RENAME TO new_name ALTER SEQUENCE name SET SCHEMA new_schema
ALTER SEQUENCE命令修改一個現(xiàn)有的序列發(fā)生器的參數(shù)。 任何沒有明確在ALTER SEQUENCE命令里聲明的參數(shù)都將保留原先的設(shè)置。
要使用ALTER SEQUENCE,你必須擁有該序列。要改變一個序列的模式, 你必須在新模式上有CREATE權(quán)限。要改變屬主,您必須也是新的所有 角色的直接或者間接的成員,并且那個角色必須有序列模式上的CREATE 權(quán)限。(這些約束強制在改變屬主時只能做刪除或者創(chuàng)建序列時能做的操作。然而, 一個超級用戶可以以任何方式改變?nèi)我庑蛄械某蓡T關(guān)系。)
一個要修改的序列的名字(可以有模式修飾)
INCREMENT BY increment子句是可選的。 一個正數(shù)會讓序列成為遞增序列,負(fù)數(shù)則成為遞減序列。如果沒有聲明,將沿用原來的遞增值。
可選的MINVALUE minvalue子句決定一個序列可以生成的最小的值。 如果聲明了NO MINVALUE,那么將使用缺省值,對于遞增和遞減的序列分別是1和-263-1。如果沒有聲明則沿用當(dāng)前的最小值。
可選的MAXVALUE maxvalue子句決定一個序列可以生成的最大的值。 如果聲明了NO MAXVALUE那么將使用缺省值,對于遞增和遞減的序列分別是263-1和-1。如果沒有聲明則沿用當(dāng)前的最大值。
可選的START WITH start子句修改序列的當(dāng)前值。 這對當(dāng)前序列值沒有影響;它僅設(shè)置將來的ALTER SEQUENCE RESTART 命令將會使用的值。
可選子句RESTART [ WITH restart ]
改變序列的當(dāng)前值。這相當(dāng)于用is_called =
false調(diào)用setval
函數(shù) : 指定的值將會通過
nextval
的next 調(diào)用返回。不通過
restart值來寫RESTART
相當(dāng)于提供CREATE SEQUENCE記錄的或者由ALTER SEQUENCE START WITH
最后設(shè)置的初始值。
CACHE cache選項打開序列號預(yù)分配功能 以及在內(nèi)存中緩沖存儲的功能。 最小值1表示每次只能生成一個數(shù)值,沒有緩沖。如果沒有聲明,將沿用舊的緩沖值。
可選的鍵字CYCLE可以用于允許序列在達到 maxvalue或者 minvalue的時候循環(huán)使用。如果達到了極限, 那么生成的下一個數(shù)字將分別是minvalue或者 maxvalue
如果聲明了可選鍵字NO CYCLE,任何在序列達到其極限后對
nextval
的調(diào)用都將返回錯誤。
如果未聲明CYCLE或者NO
CYCLE,那么將沿用原有的循環(huán)行為。
OWNED BY選項將序列和一個表的特定字段關(guān)聯(lián), 這樣,如果那個字段(或整個表)被刪除了,那么序列也將被自動刪除。 指定的新關(guān)聯(lián)將覆蓋舊有的關(guān)聯(lián)。指定的表必須與序列的屬主相同并且在同一個模式中。 指定OWNED BY NONE將刪除任何已經(jīng)存在的關(guān)聯(lián),也就是讓該序列變成"獨立"序列。
序列新所有者的用戶名。
序列的新名稱。
序列的新模式
為避免從同意序列獲取數(shù)字的并發(fā)事務(wù)阻塞,在序列產(chǎn)生參數(shù)上的 ALTER SEQUENCE影響從不回滾;這些改變會迅速起效并且是 不可逆的;然而,OWNED BY,OWNER TO, RENAME TO, 和SET SCHEMA子句會引起可被回滾的普通目錄更新。
ALTER SEQUENCE不會迅速影響后臺的nextval
結(jié)果,
除了當(dāng)前的預(yù)先分配(緩存的)序列值。他們將在意識到變化的序列產(chǎn)生參數(shù)之前,
用完所有緩存值。當(dāng)前后臺將會迅速受到影響。
ALTER SEQUENCE不影響序列的currval
狀態(tài)。
(在PostgreSQL8.3之前,有時會影響。)
由于歷史原因,ALTER TABLE也可用于序列;但是僅僅允許序列的 ALTER TABLE變量等價于以上所示的形式。
從105重新開始一個叫serial的序列:
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE遵循SQL標(biāo)準(zhǔn),但是START WITH, OWNED BY,OWNER TO,RENAME TO和 SET SCHEMA是PostgreSQL擴展。