Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       CREATE SEQUENCE - 創建一個新的序列發生器

SYNOPSIS

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

DESCRIPTION 描述

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

        如果給出了一個模式名,那麼該序列是在指定模式中創建的。
       否則它會在當前模式中創建臨時序列存在於一個特殊的模式中,因此如果創建一個臨時序列的時候,
       不能給出模式名。 序列名必需和同一模式中的其他序列,表,索引,或者視圖不同。

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

        儘管你不能直接更新一個序列,但你可以使用象

       SELECT * FROM name;

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

PARAMETERS 參數

       TEMPORARY or TEMP
               如果聲明瞭這個修飾詞,那麼該序列對象只爲這個會話創建,
              並且在會話結束的時候自動刪除。在臨時序列存在的時候,
              同名永久序列是不可見的(在同一會話裏),除非它們是用模式修飾的名字引用的。

       name
               將要創建的序列號名(可以用模式修飾)。

       increment
              INCREMENT      BY      increment       子句是可選的。一個正數將生成一個遞增的序列,
              一個負數將生成一個遞減的序列。缺省值是一(1)。

       minvalue

       NO MINVALUE
               可選的子句         MINVALUE         minvalue          決定一個序列可生成的最小值。
              如果沒有聲明這個子句或者聲明瞭 NO MINVALUE,那麼就使用缺省。 缺省分別是遞增序列爲 1
              遞減爲 -263-1。

       maxvalue

       NO MAXVALUE
               使用可選子句 MAXVALUE maxvalue  決定序列的最大值。  如果沒有聲明這個子句或者聲明瞭
              NO MAXVALUE,那麼就使用缺省。 缺省的分別是遞增爲 263-1,遞減爲 -1。

       start
               可選的  START  WITH  start  子句  使序列可以從任意位置開始。缺省初始值是遞增序列爲
              minvalue  遞減序列爲 maxvalue.

       cache  CACHE            cache             選項使序列號預分配並且爲快速訪問存儲在內存裏面。
              最小值(也是缺省值)是1(一次只能生成一個值, 也就是說沒有緩存)這也是缺省。

       CYCLE

       NO CYCLE
               可選的CYCLE關鍵字可用於使序列到達    最大值(maxvalue)    或   最小值(minvalue)
              時可復位並繼續下去。如果達到極限,生成的下一個數據將分別是  最小值(minvalue)   或
              最大值(maxvalue)。

               如果聲明瞭可選的關鍵字   NO   CYCLE,   那麼在序列達到其最大值之後任何對   nextval
              的調用都強返回一個錯誤。 如果既沒有聲明 CYCLE 也沒有聲明 NO CYCLE, 那麼  NO  CYCLE
              是缺省。

NOTES 注意

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

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

        如果                                  cache                                  設置大於一,
       並且這個序列對象將被用於併發多會話的場合,那麼可能會有不可預料的結果發生。
       每個會話在一次訪問序列對象的過程中將分配並緩存隨後的序列值,並且相應增加序列對象的
       last_value。         這樣,同一個事務中的隨後的         cache-1         次         nextval
       將只是返回預先分配的數值,而不用動序列對象。因此,任何在一個會話中分配但是沒有使用的數字都將在會話結尾丟失,導致序列裏面出現"空洞"。

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

        另外一個考慮是在這樣的序列上執行的                                                 setval
       將不會被其它會話注意到,直到它們用光他們緩存的數值。

EXAMPLES 例子

        創建一個叫 serial 的遞增序列,從101開始:

       CREATE SEQUENCE serial START 101;

        從此序列中選出下一個數字:

       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;

COMPATIBILITY 兼容性

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

譯者

       Postgresql 中文網站 何偉平 <laser@pgsqldb.org>

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh