Provided by: manpages-zh_1.5-1_all bug

NAME

       CREATE SEQUENCE - 創建一虓s的序列發生器

SYNOPSIS

       CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
           [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
           [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]

DESCRIPTIONyz
       CREATE        SEQUENCE        將向當前數據庫裏增加一虓s的序列號生成器。
       包括創建和初始化一虓s的名為
       name的單行表。生成器將為使用此命令的使用者所有。

        如果給出了一蚍狾’W,那麼該序列是在指定模式中創建的。
       否則它會在當前模式中創建臨時序列存在於一荅S殊的模式中,因此如果創建一-
       蚆{時序列的時唌A                                       不能給出模式名。
       序列名必需和同一模式中的其他序列,表,索引,或者視圖不同。

        在序列創建後,你可以使用函數    nextval,    currval,     和     setval
       操作序列。這些函數在 ``Sequence-Manipulation Functions'' 中有詳細文件。

        儘管你不能直接更新一荍C,但你可以使用像

       SELECT * FROM name;

        檢查一荍C的參數和當前狀態。特別是序列的                   last_value
       字段顯示了任意後端進程分配的最後的數C  (當然,這些b被列印出來的時-
       唹i能已經過時了 --- 如果其它進程正積極地使用 nextval。)

PARAMETERS數
       TEMPORARY or TEMP
               如果聲明了這衿飾詞,那麼該序列對象只為這虓|話創建,
              並且在會話結束的時啈菾囮R除。在臨時序列存在的時唌A
              同名永久序列是不可見的(在同一會話裏),除非它怓O用模式-
              袡◥漲W字引用的。

       name    將n創建的序列號名(可以用模式袡╮^。

       increment
              INCREMENT     BY    increment     子句是可選的。一茈蕉N生成一-
              蚖撮W的序列, 一茭數將生成一蚖撈謇漣C。預設O一(1)。

       minvalue

       NO MINVALUE
               可選的子句   MINVALUE   minvalue     決定一荍C可生成的最小C
              如果沒有聲明這茪l句或者聲明了    NO   MINVALUE,那麼就使用預設。
              預設分別是遞增序列為 1 遞減為 -263-1。

       maxvalue

       NO MAXVALUE
               使用可選子句     MAXVALUE      maxvalue       決定序列的最大C
              如果沒有聲明這茪l句或者聲明了    NO   MAXVALUE,那麼就使用預設。
              預設的分別是遞增為 263-1,遞減為 -1。

       start         可選的        START        WITH        start         子句
              使序列可以從任意位置開始。預設初始O遞增序列為         minvalue
              遞減序列為 maxvalue.

       cache  CACHE  cache   選項使序列號預分配並且為快速訪問存儲在記憶體裏情C
              最小]也是預設^是1(一次只能生成一蚧,
              也就是說沒有緩存)這也是預設。

       CYCLE

       NO CYCLE
               可選的CYCLE關鍵字可用於使序列到達  最大]maxvalue)  或  最小-
              ]minvalue)        時可復位並繼續下去。如果達到極,生成的下一-
              蚍痡N分別是 最小]minvalue) 或 最大]maxvalue)。

               如果聲明了可選的關鍵字   NO    CYCLE,    那麼在序列達到其最大-
              妨嵽籉騛 nextval 的調用都強返回一蚇欞~。 如果既沒有聲明 CYCLE
              也沒有聲明 NO CYCLE, 那麼 NO CYCLE 是預設。

NOTES`N
        使用 DROP SEQUENCE 語句來刪除序列。

        序列是基於        bigint        運算的,因此其S圍不能超過八字節的整數-
       S圍(-9223372036854775808  到  9223372036854775807)。 在一些老一點的-
       台上可能沒有對八字節整數的編譯器支持, 這種情況下序列使用普通的 integer
       運算(S圍是 -2147483648 到 +2147483647)。

        如果              cache              設置大於一,              並且這-
       荍C對象將被用於並發多會話的場合,那麼可能會有不可預料的結果發生。 每-
       虓|話在一次訪問序列對象的過程中將分配並緩存隨後的序列-
       A並且相應增加序列對象的    last_value。     這樣,同一茖云瑰H後的
       cache-1           次          nextval           將只是返回預先分配的數-
       A而不用動序列對象。因此,任何在一-
       虓|話中分配但是沒有使用的數字都將在會話結尾丟失,導P序列裏悼X現"空洞"。

        另外,儘管系統保証為多虓|話分配獨立的序列A但是如果考慮所有會話,
       那麼這蚍可能會丟失順序。比如,如果   cache    設置為  10,那麼會話  A
       保留了  1..10  並且返回  nextval=1,  然後會話  B   可能會保留   11..20
       然後在會話  A  生成  nextval=2  之前返回  nextval=11。因此,對於  cache
       設置為一的情況,我怚i以安全地假設  nextval   O順序生成的;   而如果把
       cache           設置得大於一,          那麼你只能假設          nextval
       `是唯一得,而不是完全順序地生成。                    同樣,last_value
       將反映任何會話保留的最後的數A不管它是否曾被 nextval 返回。

        另外一茼瓞{是在這樣的序列上執行的                               setval
       將不會被其它會話注意到,直到它怚峊他抻w存的數C

EXAMPLESl
        創建一茈s serial 的遞增序列,從101開始:

       CREATE SEQUENCE serial START 101;

        從此序列中選出下一蚍r:

       SELECT nextval('serial');

        nextval
       ---------
            114

        在一 INSERT 中使用此序列:

       INSERT INTO distributors VALUES (nextval('serial'), 'nothing');

        在一 COPY FROM 後更新序列:

       BEGIN;
       COPY distributors FROM 'input_file';
       SELECT setval('serial', max(id)) FROM distributors;
       END;

COMPATIBILITYe性
       CREATE SEQUENCE 是 PostgreSQL   語言擴展。  在  SQL  標準裏沒有  CREATE
       SEQUENCE 語句。

者
       Postgresql  <laser@pgsqldb.org>