GreenPlum中的序列

0    79    3

Tags:

👉 本文共约6270个字,系统预计阅读时间或需24分钟。

Greenplum数据库序列对象是一个特殊的单行表,用作数字生成器。 您可以使用序列为添加到表中的行生成唯一的整数标识符。 声明SERIAL类型的列会隐式创建一个序列计数器,以便在该表列中使用。

Greenplum数据库提供了创建,更改和删除序列的命令。 Greenplum数据库还提供内置函数来返回序列中的下一个值(nextval())或将序列设置为特定的起始值(setval())。

Note: Greenplum数据库不支持PostgreSQL currval()和lastval()序列函数。

序列对象的属性包括序列的名称,其增量值以及序列计数器的最后,最小和最大值。 序列还有一个名为is_called的特殊布尔属性,用于控制序列计数器上nextval()操作的自动递增行为。 当序列的is_called属性为true时,nextval()会在返回值之前递增序列计数器。 当序列的is_called属性值为false时,nextval()在返回值之前不会递增计数器。

创建一个序列

CREATE SEQUENCE命令使用给定的序列名称和可选的起始值创建和初始化序列。 序列名称必须与同一Schema中任何其他序列,表,索引或视图的名称不同。 例如:

创建新序列时,Greenplum数据库将序列is_called属性设置为false。 在新创建的序列上调用nextval()不会递增序列计数器,但会返回序列起始值并将is_called设置为true。

CREATE SEQUENCE 定义一个新的序列生成器。

概要

描述

CREATE SEQUENCE创建一个新的序列生成器。 这涉及创建和初始化新的特殊单行表。 生成器将由发出命令的用户所有。

如果指定了模式名称,则会在指定的模式中创建序列。 否则,它将在当前模式中创建。 临时序列存在于特殊模式中,因此在创建临时序列时可能不会给出模式名称。 序列名称必须与同一模式中任何其他序列,表,索引,视图或外部表的名称不同。

创建序列后,可以使用nextval()函数对序列进行操作。 例如,要将行插入到获取序列的下一个值的表中:

您还可以使用函数setval()对序列进行操作,但仅用于不对分布式数据进行操作的查询。 例如,允许以下查询,因为它会重置master上序列生成器进程的序列计数器值:

但是以下查询在Greenplum数据库中将被拒绝,因为它对分布式数据进行操作:

在常规(非分布式)数据库中,对序列进行操作的函数会转到本地序列表以根据需要获取值。 但是,请记住,在Greenplum数据库中,每个segment都是其自己不同的数据库进程。 因此,segment需要一个真实单点来获取序列值,以便所有segment正确递增,并且序列以正确的顺序前进。 序列服务器进程在master上运行,并且是Greenplum分布式数据库中序列的真实点。 segment在运行时从master获取序列值。

由于这种分布式序列设计,因此在Greenplum数据库中对序列操作的函数存在一些限制:

  • lastval()和currval()函数不被支持。
  • setval()仅可用于在master上设置序列生成器的值,而不能在子查询中用于更新分布式表数据上的记录。
  • 根据查询的不同,nextval()有时会从master获取一个值块以供segment使用。 因此,如果在segment级别不需要所有块,有时可能会跳过序列中的值。 请注意,常规PostgreSQL数据库也可以执行此操作,因此这并不是Greenplum数据库所独有的。

尽管您无法直接更新序列,但可以使用类似以下的查询:

检查序列的参数和当前状态。 特别是,序列的last_value字段显示了任何会话分配的最后一个值。

参数

TEMPORARY | TEMP

如果指定,则仅为此会话创建序列对象,并在会话退出时自动将其删除。 具有相同名称的现有永久序列在临时序列存在时不可见(在此会话中),除非使用模式限定名称引用它们。

name

要创建的序列的名称(可以由模式指定)。

increment

指定将哪个值添加到当前序列值以创建新值。 正值将形成一个升序,负值将形成一个降序。默认值为1。

minvalue

NO MINVALUE

确定序列可以生成的最小值。 如果未提供此子句或指定了NO MINVALUE,则将使用默认值。 升序和降序的默认值分别为1和-263-1。

maxvalue

NO MAXVALUE

确定序列的最大值。 如果未提供此子句或指定了NO MAXVALUE,则将使用默认值。 升序和降序的默认值分别为263-1和-1。

start

允许序列从任何地方开始。 默认的起始值为升序的最小值和降序的最大值。

cache

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
GreenPlum中的序列后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部