ALTER SEQUENCE
ALTER SEQUENCE — 更改一个序列发生器的定义
大纲
ALTER SEQUENCE [ IF EXISTS ]name[ ASdata_type] [ INCREMENT [ BY ]increment] [ MINVALUEminvalue| NO MINVALUE ] [ MAXVALUEmaxvalue| NO MAXVALUE ] [ START [ WITH ]start] [ RESTART [ [ WITH ]restart] ] [ CACHEcache] [ [ NO ] CYCLE ] [ OWNED BY {table_name.column_name| NONE } ] ALTER SEQUENCE [ IF EXISTS ]nameOWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nameRENAME TOnew_nameALTER SEQUENCE [ IF EXISTS ]nameSET SCHEMAnew_schema
描述
ALTER SEQUENCE更改一个现有序列发生器的参数。
任何没有在ALTER SEQUENCE命令中明确设置的参数
保持它们之前的设置。
要使用ALTER SEQUENCE,你必须拥有该序列。要更改一个序列
的模式,你还必须拥有新模式上的CREATE特权。要更改拥有者,你还必须
是新拥有角色的一个直接或者间接成员,并且该角色必须具有该域的模式上的
CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重
建该序列做不到的事情。不过,一个超级用户怎么都能更改任何序列的所有权。)。
参数
name要修改的序列的名称(可以是模式限定的)。
IF EXISTS在序列不存在时不要抛出一个错误。这种情况下会发出一个提示。
data_type可选子句
AS改变序列的数据类型。有效类型是data_typesmallint、integer和bigint。当且仅当先前的最小值和最大值是旧数据类型的最小值或最大值时(换句话说, 如果序列是使用
NO MINVALUE或NO MAXVALUE, 隐式或显式创建的),则更改数据类型会自动更改序列的最小值和最大值。 否则,将保留最小值和最大值,除非将新值作为同一命令的一部分给出。 如果最小值和最大值不符合新的数据类型,则会生成错误。increment子句
INCREMENT BY是可选的。 一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果 没有指定,旧的增量值将被保持。incrementminvalueNO MINVALUE可选的子句
MINVALUE决定一个序列 能产生的最小值。如果指定了minvalueNO MINVALUE,上升序列和下降序列的默认值分别是 1 和 数据类型的最小值。如果这些选项都没有被指定,将保持当前的 最小值。maxvalueNO MAXVALUE可选的子句
MAXVALUE决定一个序列 能产生的最大值。如果指定了maxvalueNO MAXVALUE,上升序列和下降序列的默认值分别是 数据类型的最大值和 -1。如果这些选项都没有被指定,将保持当前的 最大值。start可选的子句
START WITH更改该序列被记录的开始值。 这对于当前序列值没有影响,它会简单地设置 未来startALTER SEQUENCE RESTART命令将会使用的值。restart可选的子句
RESTART [ WITH更改该序列的 当前值。这类似于用restart]is_called=false调用setval函数:被指定的值将会被 下一次nextval调用返回。写上没有restart值的RESTART等效于提供被CREATE SEQUENCE记录的或者上一次被ALTER SEQUENCE START WITH设置的开始值。与
setval调用相比,序列上的RESTART操作是事务性的并阻止并发事务从同一序列中获取数字。 如果这不是所需的操作模式,则应使用setval。cache子句
CACHE使得序列数字被预先 分配并且保存在内存中以便更快的访问。最小值是 1(每次只产生一个值,即 无缓存)。如果没有指定,旧的缓冲值将被保持。cacheCYCLE可选的
CYCLE关键词可以被用来允许该序列在达到maxvalue(上升序列)或minvalue(下降序列)时 回卷。如果到达该限制,下一个被产生的数字将分别是minvalue或者maxvalue。NO CYCLE如果指定了可选的
NO CYCLE关键词,任何在该 序列到达其最大值后的nextval调用将会返回 一个错误。如果既没有指定CYCLE也没有指定NO CYCLE,旧的循环行为将被保持。OWNED BYtable_name.column_nameOWNED BY NONEOWNED 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变体才被
允许用于序列。
示例
在 105 重启一个被称为serial的序列:
ALTER SEQUENCE serial RESTART WITH 105;
兼容性
ALTER SEQUENCE符合SQL
标准,不过AS、START WITH、
OWNED BY、OWNER TO、RENAME TO
以及SET SCHEMA子句是
PostgreSQL扩展。




