postgresql|数据库|序列Sequence的创建和管理

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: postgresql|数据库|序列Sequence的创建和管理

前言:

Sequence也是postgresql数据库里的一种对象,其属性如同索引一样,但通常Sequence是配合主键来工作的,这一点不同于MySQL,MySQL的主键自增仅仅是主键的属性做一个更改,而postgresql的主键自增是需要序列这个对象来配合的,也就是说,如果仅仅创建了一个序列,但此序列没有和任何主键对象绑定,那么,这个序列并没有什么实际的意义,这一点一定要注意。

当然了,postgresql里面的序列因为是一个对象,因此,在数据库开发中是非常的方便的,比起MySQL要先进很多的哦。

那么,下面就序列的增删改查和序列的管理这些问题做一个简单的介绍。

  • 序列是bigint 整数,取值范围:-2的63方~2的63方-1 ,也就是 +-9223372036854775807
  • 序列属于relation其中之一,所以在同一个schema下,不能与 table, index, TOAST table,view,materialized view, composite type, foreign table, partitioned table, partitioned index同名。
  • 序列创建后,可以使用函数currval(),nextval(),setval(),lastval()对其进行增改查操作。

一,

查看序列和序列的属性

查看序列 短命令  \ds

postgres=# \ds
          List of relations
 Schema | Name |   Type   |  Owner   
--------+------+----------+----------
 public | test | sequence | postgres
(1 row)

查看序列的属性详情:

  • 此序列是一个大数字类型的序列,也就是纯数字
  • 初始值是1,也就是start这一列
  • 步长是 1 , 也就是Increment 这一列
  • 最大值是92233、、、、、、  你们自己数吧
  • 如果达到最大值后,此序列是否循环从1开始再次自增?  也就是cycles这一列   ,答案是否 ,no嘛,
  • 缓存数值,一般设置为1,这个无需更改
postgres=# \d test
                            Sequence "public.test"
  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
--------+-------+---------+---------------------+-----------+---------+-------
 bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1

此序列是否被绑定到某个表的主键:

查询该序列是否有值,可以看到,并没有,报错,还没有被定义在此会话期间,其实此序列我们也可以称它为孤儿序列

postgres=# select currval('test');
ERROR:  currval of sequence "test" is not yet defined in this session

运行以下命令查询所有的孤儿序列:

SELECT ns.nspname  AS schema_name
      ,seq.relname AS seq_name
  FROM pg_class AS seq
  JOIN pg_namespace ns
    ON (seq.relnamespace = ns.oid)
 WHERE seq.relkind = 'S'
   AND NOT EXISTS (SELECT *
          FROM pg_depend
         WHERE objid = seq.oid
           AND deptype = 'a')
 ORDER BY seq.relname;

输出如下:

如果绑定了某个表的主键,那么删除的时候会报错,报错信息里会提示依赖于哪个表,后面介绍删除的时候在详细说明。

二,

创建序列和绑定序列到某个表的某个主键

这里分为两种情况,第一种是已有序列的绑定,第二种是新建序列后绑定到某个表的某个主键

告个假,明天在更新剩余部分~~~主要是夜深了~~~~ 未完待续~~~~~!!!!!!!

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
28天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构涵盖数据库集群、数据库、表、索引、视图等对象,每个对象有唯一的oid标识。数据库集群包含多个数据库,每个数据库又包含多个模式,模式内含表、函数等。通过特定SQL命令可查看和管理这些数据库对象。
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
66 15
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
376 59
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
361 1
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
180 4
|
2月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
3月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
650 2
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景