更改序列

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;