• 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

    1. postgres=# \ds
    2. List of relations
    3. Schema | Name | Type | Owner
    4. --------+------+----------+----------
    5. public | test | sequence | postgres
    6. (1 row)

    查看序列的属性详情:

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

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

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

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

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

    1. SELECT ns.nspname AS schema_name
    2. ,seq.relname AS seq_name
    3. FROM pg_class AS seq
    4. JOIN pg_namespace ns
    5. ON (seq.relnamespace = ns.oid)
    6. WHERE seq.relkind = 'S'
    7. AND NOT EXISTS (SELECT *
    8. FROM pg_depend
    9. WHERE objid = seq.oid
    10. AND deptype = 'a')
    11. ORDER BY seq.relname;

    输出如下:

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

    二,

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

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

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

  • 相关阅读:
    浏览器跨域
    DDD 学习笔记
    linux升级openssh9
    美妆行业如何通过自媒体提升品牌曝光
    [创业之路-120] :全程图解:软件研发人员如何从企业的顶层看软件产品研发?
    DevOps(十四)怎么实现Gitlab更新后Jenkins自动发布
    docker 学习笔记
    微信小程序 ——入门介绍及简单的小程序编写
    Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere
    【CT】LeetCode手撕—88. 合并两个有序数组
  • 原文地址:https://blog.csdn.net/alwaysbefine/article/details/134023881