Sequence也是postgresql数据库里的一种对象,其属性如同索引一样,但通常Sequence是配合主键来工作的,这一点不同于MySQL,MySQL的主键自增仅仅是主键的属性做一个更改,而postgresql的主键自增是需要序列这个对象来配合的,也就是说,如果仅仅创建了一个序列,但此序列没有和任何主键对象绑定,那么,这个序列并没有什么实际的意义,这一点一定要注意。
当然了,postgresql里面的序列因为是一个对象,因此,在数据库开发中是非常的方便的,比起MySQL要先进很多的哦。
那么,下面就序列的增删改查和序列的管理这些问题做一个简单的介绍。
查看序列 短命令 \ds
- postgres=# \ds
- List of relations
- Schema | Name | Type | Owner
- --------+------+----------+----------
- public | test | sequence | postgres
- (1 row)
查看序列的属性详情:
- 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;
输出如下:

如果绑定了某个表的主键,那么删除的时候会报错,报错信息里会提示依赖于哪个表,后面介绍删除的时候在详细说明。
二,
创建序列和绑定序列到某个表的某个主键
这里分为两种情况,第一种是已有序列的绑定,第二种是新建序列后绑定到某个表的某个主键
告个假,明天在更新剩余部分~~~主要是夜深了~~~~ 未完待续~~~~~!!!!!!!