更改序列
ALTER SEQUENCE
可以通过两种方式更改命名序列:
-
重置控制序列行为的参数,例如其起始值或最小值和最大值的范围。这些更改仅在您启动新数据库会话时生效。
-
重置序列名称、架构或所有权。这些更改会立即生效。
注意
同一个ALTER SEQUENCE
语句不能同时进行这两种类型的更改。
更改序列行为
ALTER SEQUENCE
可以通过以下参数更改一个或多个序列属性:
这些更改仅在您启动新数据库会话时生效。例如,如果创建一个从 10 开始并按 1(默认值)递增的命名序列 my_sequence
,则序列每次调用 NEXTVAL
都会按 1 递增其值:
=> CREATE SEQUENCE my_sequence START 10;
=> SELECT NEXTVAL('my_sequence');
nextval
---------
10
(1 row)
=> SELECT NEXTVAL('my_sequence');
nextval
---------
11
(1 row)
以下 ALTER SEQUENCE
语句指定重新启动序列时从 50 开始:
=>ALTER SEQUENCE my_sequence RESTART WITH 50;
但是,此更改在当前会话中不起作用。对 NEXTVAL
的下一次调用会将序列递增至 12:
=> SELECT NEXTVAL('my_sequence');
NEXTVAL
---------
12
(1 row)
只有在启动新的数据库会话后,该序列才会在 50 处重新启动:
=> \q
$ vsql
Welcome to vsql, the Vertica Analytic Database interactive terminal.
=> SELECT NEXTVAL('my_sequence');
NEXTVAL
---------
50
(1 row)
更改序列名称、架构和所有权
可以使用 ALTER SEQUENCE
对命名序列进行以下更改:
-
重命名它。
-
将其移动到另一个架构。
-
重新分配所有权。
这些更改中的每个更改都需要使用单独的 ALTER SEQUENCE
语句。这些更改会立即生效。
例如,以下语句将序列从 my_seq
重命名为 serial
:
=> ALTER SEQUENCE s1.my_seq RENAME TO s1.serial;
以下语句将序列 s1.serial
移动到架构 s2
中:
=> ALTER SEQUENCE s1.my_seq SET SCHEMA TO s2;
以下语句将 s2.serial
的所有权重新分配给另一个用户:
=> ALTER SEQUENCE s2.serial OWNER TO bertie;