首页 > 数据库 >PostgreSQL数据库-Sequence的作用和用法

PostgreSQL数据库-Sequence的作用和用法

时间:2023-02-06 16:32:18浏览次数:75  
标签:shipments PostgreSQL seq Sequence -- 数据库 sequence 序列 id


PostgreSQL 中的序列是一个数据库对象,本质上是一个自增器。所以,Sequence也可以通过在每个属性后加上 autoincrment的值的形式存在。
sequence的作用有两个方面:

  1. 作为表的唯一标识符字段的默认值使用
  2. 主要用于记录数据库中的id,只要语句有动作(I|U|D),sequence的号就会随着更新。

Sequence 对象中包含当前值,和一些独特属性,例如如何递增(或者递减)。实际上,Sequence 是不能被直接访问到的;他们需要通过 PostgreSQL 中的相关函数来操作他们。

创建序列

创建的语法如下:

CREATE SEQUENCE sequencename
[ INCREMENT increment ] -- 自增数,默认是 1
[ MINVALUE minvalue ] -- 最小值
[ MAXVALUE maxvalue ] -- 最大值
[ START start ] -- 设置起始值
[ CACHE cache ] -- 是否预先缓存
[ CYCLE ] -- 是否到达最大值的时候,重新返回到最小值

Sequence 使用的是整型数值,因此它的取值范围是 [-2147483647, 2147483647] 之间;现在我们创建一个简单的序列:

CREATE SEQUENCE comment_id_seq INCREMENT 1;

使用序列

我们需要知道的 Sequence 的函数使用:

  • nextval(‘sequence_name’): 将当前值设置成递增后的值,并返回
  • currval(‘sequence_name’): 返回当前值
  • setval(‘sequence_name’, n, b=true): 设置当前值;b 默认设置 true,下一次调用 nextval() 时,直接返回 n,如果设置 false,则返回 n+increment:

删除序列

DROP SEQUENCE seq_name[, ...]

来删除一个或者多个序列。命令中的 seq_name 是序列名,不须被引号包围;如果是多个序列,可以使用逗号隔开。

pigdb=# DROP SEQUENCE shipments_ship_id_seq;
ERROR: cannot drop sequence shipments_ship_id_seq because other objects depend on it
DETAIL: default for table shipments column id depends on sequence shipments_ship_id_seq
HINT: Use DROP ... CASCADE to drop the dependent objects too.

这里报错了,如果该序列被其他对象所引用,因此无法直接删除,除非使用DROP…CASCADE
我们可以使用下面的语句来查看的序列是否被数据库中的其他对象引用:

pigdb=# SELECT p.relname, a.adsrc FROM pg_class p
JOIN pg_attrdef a on (p.relfilenode = a.adrelid)
WHERE a.adsrc ~ 'shipments_ship_id_seq';
relname | adsrc
-----------+--------------------------------------------
shipments | nextval('shipments_ship_id_seq'::regclass)
(1 row)

这里检查到 shipments_ship_id_seq 序列被 shipments 引用。你可以把这个序列名替换成任何一个你像查看的序列;或者不添加任何条件查看当前数据库中所有序列的引用。
(此处没有理解,后续补充)

思路参考学习了这个大神的博客:
​​​PostgreSQL - 序列​


标签:shipments,PostgreSQL,seq,Sequence,--,数据库,sequence,序列,id
From: https://blog.51cto.com/u_15955938/6039491

相关文章

  • 【QostgreSql】不同用户下数据库合并到新库
    场景根据业务需求,需要将user1下的dev数据库和user2下的auth数据库整合到user1的新库prod。经过PostgreSql服务器root用户登录上去发现没有postgres用户。进入home目录......
  • MySQL 查看数据库中每个表占用的空间大小
    1、进去指定schema数据库(存放了其他的数据库的信息) mysql>useinformation_schema;Databasechanged2、查询所有数据的大小mysql>selectconcat(round(sum(DATA_LEN......
  • 数据库并发控制机制的理解
    隔离级别相当于数据库实现的一套现有的机制,我们直接可以复用;但对于特殊需求,我们可以自己使用锁机制来实现,其实我们自己就可以使用锁机制,实现一套隔离级别;锁机制只是隔......
  • 22.1 SQL Server数据库优化
    SQLServer数据库优化目录SQLServer数据库优化硬件优化索引优化1)确保每张表都要有主键2)合理创建聚集索引3)创建适当的覆盖索引4)整理索引碎片查看索引碎片信息整理索引碎......
  • 存储Cache 丢失导致数据库无法open的案例
    ​最近某客户的一套核心数据库由于存储问题导致清掉Cache之后无法启动。首先我们来看看数据库在启动的时候报什么错误: ThuSep2119:35:552017WARNING:WriteFailed.gr......
  • 了解数据库
         ......
  • 数据库必知必会:TiDB(1)数据库架构概述
    (数据库必知必会:TiDB(1)数据库架构概述)TiDB体系架构TiDB兼容MySQL5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。TiDB的体系架构为:TiDBServer,接收......
  • 使用PLSQL developer远程连接oracle数据库(windows)--简单版
    1、PLSQLDeveloper下载安装及激活下载地址:链接:https://pan.baidu.com/s/1WP5TywMR0LtsPfPg630gjQ提取码:wd79复制这段内容后打开百度网盘手机App,操作更方便哦note......
  • 3 Mysql数据库总结
    1数据库索引索引就像书的目录,通过书的目录就准确的定位到了书籍具体的内容。我们知道目录只存放标题,浏览标题比翻书要快的多。就好比我们对id建立索引,我们查询id就只查询i......
  • 数据库
    一、触发器1.什么是触发器(trigger)触发器(trigger)是SQLserver提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序......