pgsql 序列,pg数据库 序列
墨初 知识笔记 138阅读
前言
Sequence也是postgresql数据库里的一种对象其属性如同索引一样但通常Sequence是配合主键来工作的这一点不同于MySQLMySQL的主键自增仅仅是主键的属性做一个更改而postgresql的主键自增是需要序列这个对象来配合的也就是说如果仅仅创建了一个序列但此序列没有和任何主键对象绑定那么这个序列并没有什么实际的意义这一点一定要注意。
当然了postgresql里面的序列因为是一个对象因此在数据库开发中是非常的方便的比起MySQL要先进很多的哦。

那么下面就序列的增删改查和序列的管理这些问题做一个简单的介绍。
一 查看序列和序列的属性查看序列 短命令 \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;
输出如下
如果绑定了某个表的主键那么删除的时候会报错报错信息里会提示依赖于哪个表后面介绍删除的时候在详细说明。
二
创建序列和绑定序列到某个表的某个主键
这里分为两种情况第一种是已有序列的绑定第二种是新建序列后绑定到某个表的某个主键
告个假明天在更新剩余部分~~~主要是夜深了~~~~ 未完待续~~~~~
标签: