`
LJ你是唯一LT
  • 浏览: 239320 次
社区版块
存档分类
最新评论

pg 序列

阅读更多

一、简介
一个序列对象通常用于为行或者表生成唯一的标识符。

二、创建序列
方法一:直接在表中指定字段类型为serial 类型
create table test (id serial not null primary key ,name varchar(10));
NOTICE:  CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"
CREATE TABLE

方法二:先创建序列,然后在新建的表中列属性指定序列,该列需int 类型
创建序列的语法:
CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table.column | NONE } ]

先创建序列
create sequence test1_id_seq increment by 1 minvalue 1 no maxvalue start with 1;    
CREATE SEQUENCE

创建表指定该序列
create table test1(id int not null default nextval('test1_id_seq'), name varchar(10));
CREATE TABLE

三、查看序列
tina=# \d test1
                                Table "public.test1"
Column |         Type          |                     Modifiers                     
--------+-----------------------+----------------------------------------------------
id     | integer               | not null default nextval('test1_id_seq'::regclass)
name   | character varying(10) |

tina=# \d test1_id_seq
        Sequence "public.test1_id_seq"
    Column     |  Type   |        Value       
---------------+---------+---------------------
sequence_name | name    | test1_id_seq
last_value    | bigint  | 1
start_value   | bigint  | 1
increment_by  | bigint  | 1
max_value     | bigint  | 9223372036854775807
min_value     | bigint  | 1
cache_value   | bigint  | 1
log_cnt       | bigint  | 0
is_cycled     | boolean | f
is_called     | boolean | f


四、序列应用
4.1 在INSERT 命令中使用序列
insert into test1 values (nextval('test1_id_seq'), 'David');     
INSERT 0 1
insert into test1 values (nextval('test1_id_seq'), 'tina');
INSERT 0 1
select * from test1;
id | name 
----+-------
  1 | David
  2 | tina
(2 rows)


4.2 数据有变后更新序列
指定序列从某个值从新开始计数
alter sequence test1_id_seq restart with 100;
ALTER SEQUENCE

查看当前序列值
select currval('test1_id_seq');
currval
---------
      2
(1 row)

查看下一个序列值
select nextval('test1_id_seq');
nextval
---------
     100
(1 row)

select nextval('test1_id_seq'); ---查一次增长一次
nextval
---------
     101
(1 row)

select nextval('test1_id_seq');
nextval
---------
     102
(1 row)

指定序列的值:
tina=# select setval('test1_id_seq', max(id)) from test1; --目前最大的id为2,将这个值赋给序列
setval
--------
      2
(1 row)

tina=# select nextval('test1_id_seq');
nextval
---------
       3
(1 row)


五、序列函数
函数 返回类型 描述
nextval(regclass) bigint 递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。

currval(regclass) bigint 在当前会话中返回最近一次nextval抓到的该序列的数值。此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。

lastval() bigint 返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。
如果当前会话还没有调用过nextval,那么调用lastval将会报错。

setval(regclass, bigint) bigint 重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。

setval(regclass, bigint, boolean) bigint 重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。


select lastval();  --不需要指定序列名,只是当前会话最后一次nextval的值
lastval
---------
       3
(1 row)
其他几个上面已经使用过了。

六、修改序列
语法:
ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table.column | NONE } ]
alter sequence name increment by 2 restart with 200;

修改属主和名称:  
alter sequence name owner to new_owner;
alter sequence name rename to new_name;
alter sequence name set schema new_schema;

授权:
grant select,update on sequence tbname_id_seq to username; 

七、删除序列
语法:
DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
当有表字段使用到PG序列时,不能直接删除。

drop sequence test1_id_seq;
ERROR:  cannot drop sequence test1_id_seq because other objects depend on it
DETAIL:  default for table test1 column id depends on sequence test1_id_seq
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

drop table test1;
DROP TABLE

drop sequence test1_id_seq;
DROP SEQUENCE

说明:如果序列是由建表时指定serial 创建的,删除该表的同时,对应的序列也会被删除。


分享到:
评论

相关推荐

    非参数回归模型在金融时间序列上的应用

    非参数回归模型在金融时间序列上的应用,朱云霓,刘琼荪,本文旨在运用非参数回归模型来解决金融上的实际问题;对1998~2009年的上证综指的收益率数据进行了简单的统计分析,说明利用非参数回

    维护和管理 Postgres 数据库用的通用工具pgadmin3-1.14.3.tar.gz

    可用于数据库,表,索引,序列,视图,触发器, 函数和语言的浏览器和构造器。 用户,组和权限配置对话框。 带有升级脚本生成功能的版本跟踪。 Microsoft MSysConf 表的配置。 数据输入和输出向导。 数据库迁移...

    ora2pg使用指南1

    1、导出整个数据库模式(表、视图、序列、索引),以及唯一性,主键、外键和检查约束 2、导出用户和组的授权/权限 3、导出筛选的表(通过制定表明) 5、导出预定义

    pgadmin4-2.0-py2.py3-none-any.whl

    可用于数据库,表,索引,序列,视图,触发器, 函数和语言的浏览器和'构造器'。 用户,组和权限配置对话框。 带有升级脚本生成功能的版本跟踪。 Microsoft MSysConf 表的配置。 数据输入和输出向导。 数据库的CRUD...

    pg_partman:PostgreSQL分区管理扩展

    pg_partman是用于创建和管理基于时间和基于序列的表分区集的扩展。 从pg_partman v3.0.1开始支持PostgreSQL 10的本机分区,而从PostgreSQL 11开始从4.0.0起更广泛的支持。请注意,本机尚不支持基于触发器的分区的...

    PostgreSQL中文手册9.2

    九、序列操作函数: 九、序列操作函数: 九、序列操作函数: 九、序列操作函数: . 35 十二、系统信息 十二、系统信息 十二、系统信息 函数: 函数: .38 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习...

    pg-entity:不会妨碍您的PostgreSQL数据库层

    PG实体 该库是之上的一个令人愉悦的层。 它旨在成为刚性ORM与手动SQL查询字符串之间的便利中间地带。 这是它的理念: 序列化/反序列化部分留给使用者,因此您必须使用自己的FromRow / ToRow实例。 鼓励您采用对...

    圆弧青霉脂肪酶基因序列的生物信息学分析 (2010年)

    从圆弧青霉PG37中克隆了碱性脂肪酶(LipI)基因,并采用生物信息学分析了PG37 LipI基因携带的遗传信息。序列分析结果表明:Lip IDNA序列全长1480bp,不存在重复序列,含有5个内含子,5'端存在TATA box和多个转录因子...

    pg-query-parser:适用于Node.js的PostgreSQL查询解析器

    使用此模块,您可以修改SQL查询语句的一部分,并将查询树序列化回格式化SQL语句。 它使用真正的。 该模块提供的主要功能是解析,而PostgreSQL在内部没有。安装npm install pg-query-parser例子重写SQL查询的一部分...

    程序员考试刷题-PG5200-Eksamen-Card-Creator:PG5200Eksamen炉石卡创建者

    PG5200 工具编程考试 贡献者:& 介绍 我们受委托为《炉石传说》等游戏创建卡片编辑器。 我们想要创建这样的应用程序的原因是游戏设计师应该能够有效地为他们的游戏批量生产潜在的卡片。 应用程序的要求是它已经用 C#...

    pg_dba_metrics:用于从任意Postgres查询生成时间序列指标的脚本,以进行监视,分析和警报

    pg_dba_metrics 简单的python脚本,可以对数据库执行任意查询,并以JSON格式返回结果,以供New Relic自定义指标API使用 用法 安装 git clone https://github.com/tym-xqo/pg_dba_metrics cd pg_dba_metrics pip ...

    sequelize-automate:从数据库自动生成裸序列模型

    序列化自动化 自动为生成模型。 支持javascript,打字稿,egg.js和midway。 正在安装 全球的 $ npm install -g sequelize-automate 您还必须为所选的数据库手动安装驱动程序: # One of the following: $ npm ...

    node-sequelize-relations:节点+序列化+ PG

    使用Sequelize,Postgres在Node / Express App中构建REST API 该存储库正在使用Sequelize和Postgres在Node / Express App中构建REST API设计。先决条件设置 $ npm install $ node_modules/.bin/sequelize ...

    辣椒多聚半乳糖醛酸酶基因 CaPG的克隆与序列分析 (2010年)

    以耐贮辣椒品系P98为材料,采用RACE方法...Blast比对发现,该基因核苷酸序列与已报道的番茄和番木瓜PG基因具有84%和85%的相似性。聚类分析表明,该基因与番茄和番木瓜的亲缘关系较近,与拟南芥PG基因的亲缘关系较远。

    PostgreSQL教程(十五):系统表详解

     该系统表记录了数据表、索引(仍然需要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型的元数据。注意:不是所有字段对所有对象类型都有意义。   名字 类型 引用 描述 relname name   数据类型名字...

    RFID技术中的RF收发器应用中直接序列扩频处理增益的计算方法

    通常码片速率远高于数据源的比特率,而二者之间的比值就是处理增益(PG)。PG真实地反映了在接收端解扩(去掉PN码)前后信噪比的改善情况。  DSSS系统的接收机必须首先去掉接收信号的扩频码(即解扩),然后才能对信号...

    pg-emoji::smiling_face_with_heart-eyes::elephant:PostgreSQL表情符号编码的代码扩展

    查找表由[ ]中的前1024个表情符号构成,其中每个表情符号都映射到一个唯一的10位序列。 输入数据分为10位片段,映射到相应的表情符号。 结果中的第一个表情符号是标题,如果结果填充为零,则第一位为1,其余9位为...

    分布式高性能日志复制服务 DistributedLog.zip

    DistributedLog会分类维护记录的序列(sequences of records),并将其称为Log(又叫做Log Stream),将记录写入到DL Log的进程称之为Writer,从Log中读取并处理记录的进程称之为Reader。因此,它整体的软件栈如下所...

    Kolmogorov 复杂度:有限时间序列的 Kolmogorov 复杂度的估计。-matlab开发

    该算法如 Lempel 和 Ziv (IEEE trans inf theory IT-22, 75 (1976)) 和 Kaspar and Schuster (Physical Review A, vol 36, no 2, pg 842) 中所述。 输入是二进制序列,输出是 kolmogorov 复杂度。

    卡门柏青霉-PG3脂肪酶基因的克隆、表达及活性分析 (2006年)

    以卡门柏青霉-PG3为出发菌株,提取其总RNA,应用反转录.聚合酶链式反应(RT-PCR)扩增出860bp左右的片段,核苷酸序列分析表明其与甘油单-双酰酯脂肪酶(MDGL)基因(mdlA)一致。将此基因克隆到原核表达载体pET-28a中,...

Global site tag (gtag.js) - Google Analytics