序列的创建和访问
[tbase@VM_0_29_centos tbase_mgr]$ psql -p 15432 -U tbase -d postgrespsql (PostgreSQL 10 (TBase 2.01))Type "help" for help.-- 建立序列postgres=# create sequence tbase_seq;CREATE SEQUENCE-- 建立序列,不存在时才创建postgres=# create sequence IF NOT EXISTS tbase_seq;NOTICE: relation "tbase_seq" already exists, skippingCREATE SEQUENCE-- 查看序列当前的使用状况postgres=# \\\\xExpanded display is on.postgres=# select * from tbase_seq ;-[ RECORD 1 ]-last_value | 1log_cnt | 0is_called | f-- 获取序列的下一个值postgres=# select nextval('tbase_seq');nextval---------1-- 获取序列的当前值,这个需要在访问 nextval()后才能使用postgres=# select currval('tbase_seq');currval---------1-- 可以后下面的方式来获取序列当前使用到那一个值postgres=# select last_value from tbase_seq ;last_value------------3-- 设置序列当前值postgres=# select setval('tbase_seq',1);setval--------1
序列在 DML 中使用
-- 插入数据,使用序列postgres=# INSERT INTO t (id, nickname) VALUES (nextval('tbase_seq'), 'TBase 好');INSERT 0 1postgres=# select * from t;id | nickname----+-----------1 | 腾讯 TBase2 | TBase 好(2 rows)
序列作为字段的默认值使用
-- 将序列设置为字段的默认值postgres=# alter table t alter column id set default nextval('tbase_seq');-- 插入数据,字段使用序列默认值postgres=# INSERT INTO t (nickname) VALUES ('hello TBase');postgres=# select * from t;id | nickname----+-------------3 | hello TBase1 | 腾讯 TBase2 | TBase 好(3 rows)
序列作为字段类型使用
-- 删除表postgres=# drop table t;DROP TABLE-- 创建表,字段使用序列类型postgres=# create table t (id serial not null, nickname text);CREATE TABLE-- 插入数据,字段自动使用序列postgres=# INSERT INTO t (nickname) VALUES ('hello TBase');INSERT 0 1postgres=# select * from t;id | nickname----+-------------1 | hello TBase(1 row)
删除序列
-- 删除序列postgres=# drop sequence tbase_seq;DROP SEQUENCE-- 删除序列,不存在时跳过postgres=# drop sequence IF EXISTS tbase_seq;NOTICE: sequence "tbase_seq" does not exist, skippingDROP SEQUENCE