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