一、创建序列
示例
-- SEQUENCE: test_id_seq -- DROP SEQUENCE test_id_seq; CREATE SEQUENCE test_id_seq INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1;语法
CREATE SEQUENCE [ IF NOT EXISTS ] sequence_name [ AS { SMALLINT | INT | BIGINT } ] [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ]说明
在上面的语法中,我们使用了以下参数:
范围 描述 sequence_name sequence_name 不同于类似模式中的任何其他序列、索引、表、视图或外部表。我们可以在CREATE SEQUENCE之后定义序列名称并且IF NOT EXISTS 条件仅在它不存在时才临时生成一个新序列。 [ AS { SMALLINT \ INT \ BIGINT } ] 调节序列的最大值和最小值的序列的数据类型。我们可以定义序列的数据类型,其中支持的数据类型为INT、BIGINT和SMALLINT。如果我们忘记提及数据类型,则将其视为 BIGINT,因为它是 Sequence 的默认数据类型。 [ INCREMENT [ BY ] increment ] 增量描述了值,必须将其添加到现有序列值以生成新值,默认值为 1。此处,正 (+) 数将产生升序,而负 (-) 数将产生降序。 [ MINVALUE minvalue \ NO MINVALUE ] 如果我们使用NO MINVALUE 和 NO MAXVALUE,则序列将采用默认值。对于升序,最大默认值为Sequence 数据类型的最大值,默认最小值为1。而对于降序序列,最大默认值为-1,默认最小值为Sequence 数据类型的最小值。 [ MAXVALUE maxvalue \ NO MAXVALUE ][ START [ WITH ] start ] 该START子句用于定义序列的起始值。并且默认初始值是降序的最大值和升序的最小值。 cache 一次可以创建一个值,默认情况下,该序列一次创建一个值,没有缓存。该CACHE参数用于指定总的序列号预先分配并存储在存储器中用于较早获得。 CYCLE \ NO CYCLE 在CYCLE参数允许我们如果达到限制恢复值。在下面的数将是最大值为递减序列和最小值为升序序列。如果我们使用 NO CYCLE,当达到限制时,或者我们正在尝试获取下一个值时,它会在输出中引发错误。该NO CYCLE是默认的,如果我们不定义CYCLE或NO CYCLE。 OWNED BY table_name.column_name 最后,使用OWNED BY 参数将表列与序列链接起来。因此,PostgreSQL 会自动丢弃相关序列;如果我们删除表或列。 注意:当我们对表的某列使用SERIAL伪类型时,在后台,PostgreSQL会自动生成一个与该列相关的序列。
更新序列的值
场景:自增id作为key重复的问题
解决方案:
SELECT setval(‘test_id_seq', (SELECT MAX(id) FROM test_table));即:将序列当前值,更新为表的最大key值
本文介绍了如何在PostgreSQL中创建序列,包括示例和语法解析。同时,针对自增ID重复问题,提出了通过更新序列值至表中最大键值的解决方案。

3391

被折叠的 条评论
为什么被折叠?



