七叶笔记 » 数据库 » 深入解读PostgreSQL中的序列及其相关函数的用法

深入解读PostgreSQL中的序列及其相关函数的用法

方法二:先创建序列名称,然后在新建的表中列属性指定序列就可以了,该列需int 类型

创建序列的语法:

实例:

三、查看序列

查看序列属性

四、序列应用

4.1 在INSERT 命令中使用序列

4.2 数据迁移后更新序列

 

 

五、序列函数

下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安全的方法。

5.1 查看下一个序列值

5.2 查看序列最近使用值

5.3 重置序列

方法一:使用序列函数

方法二:修改序列

修改序列的语法:

实例:

 

六、删除序列

语法:

当有表字段使用到PG序列时,不能直接删除。

说明:对于序列是由建表时指定serial 创建的,删除该表的同时,对应的序列也会被删除。

七、其他说明 a.currval取得的是当前会话的序列值,在当前会话中该值不会因为其他会话取了nextval而变化。会变化的是全局的last_value值,并且当前会话中如果没有读过nextval值时直接读currval是会报错的。 b.对于序列是由建表时指定serial时创建时,删除该表的同时,对应的序列也会被删除。 c.表主键数据可以用跟表相关的序列,也可以用其他序列,但不推荐,只是PG默认它没错。 d.为使多用户并发下同一个序列取值不会重复,nextval是不会rollback的,不过可以使用setval重置 如果一个序列对象是带着缺省参数创建的,那么对它调用 nextval 将返回从1 开始的后续的数值。 其它的行为可以通过使用 CREATE SEQUENCE 命令里的 特殊参数获取;参阅其命令参考页获取更多信息。 e.为了避免从同一个序列获取数值的当前事务被阻塞, nextval 操作决不会回滚;也就是说,一旦一个数值已经被抓走, 那么就认为它已经用过了,即使调用 nextval 的事务后面又退出了也一样。这就意味着退出的事务可能在序列赋予的数值中留下"空洞"。 setval 操作也决不回滚。

相关文章