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

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 创建的,删除该表的同时,对应的序列也会被删除。


分享到:
评论

相关推荐

    pgadmin学习手册

    【pgadmin学习手册】 在数据库管理领域,PostgreSQL是一种强大且功能丰富的开源关系型数据库管理系统,而pgAdmin则是一款专为PostgreSQL设计的图形化管理工具。本手册将深入探讨如何利用pgAdmin进行有效的数据库...

    PgAdmin4安装包

    1. **数据库对象管理**: PgAdmin4允许用户创建、修改和删除数据库、表、视图、索引、序列、函数、角色等对象。 2. **SQL编辑器**: 提供了一个集成的SQL编辑器,支持代码自动完成、语法高亮和错误检查,方便编写和...

    pgadmin3客户端

    1. **数据库管理**:pgAdmin3允许用户创建、删除和修改数据库,同时提供数据库对象的浏览和编辑功能,如表、视图、索引、触发器、规则和序列。 2. **查询工具**:内置的SQL编辑器支持编写、执行和保存SQL语句,还...

    GP pg_catalog查询.docx

    3. **pg_class**: 这是最重要的系统目录表之一,它记录了所有表(包括普通表和视图)和其他类型的关系(如索引、序列、表空间等)。运行`SELECT * FROM pg_catalog.pg_class;`以获取数据库中的所有对象信息。 4. **...

    ora2pg使用指南1

    1. **导出数据库模式**: ora2pg 可以导出 Oracle 数据库中的全部或部分模式,包括表、视图、序列、索引等数据库对象。这使得用户能够完整地重建 Oracle 数据库在 PostgreSQL 中的结构。同时,它还会处理唯一性、主键...

    pgadmin教程-图解

    在数据库属性对话框中,用户可以定义数据表、序列和函数的新权限。 数据表属性对话框在1.12版本中也得到了优化,类型列表被缓存,提高响应速度。对于Greenplum数据库,它还会显示分区名。同时,数据表属性增加了...

    pgadmin3-1.22.2

    1. **数据库对象管理**:pgAdmin3允许用户创建、修改和删除各种数据库对象,如表、视图、索引、序列、函数、触发器等。它提供了直观的界面,用户可以通过简单的拖拽和填写表单完成操作。 2. **SQL编辑器**:内置的...

    pgAdmin3客户端

    2. **对象浏览**:它提供了一个树状视图,展示数据库中的所有对象,如表、视图、索引、函数、序列等,用户可以轻松地浏览、选择和操作这些对象。 3. **SQL编辑器**:内置的SQL编辑器允许用户编写、执行SQL查询,并...

    FX2N-1PG模块使用手册.rar

    它能够输出高精度的脉冲序列,用于驱动步进电机或伺服电机,实现对机械设备的精确定位控制。模块具备单轴输出,最高可输出100kHz的脉冲频率,支持正弦波和矩形波形。 二、模块特性 1. 高速脉冲输出:FX2N-1PG能提供...

    PG12864F液晶显示及PROTUES仿真.rar

    在本项目中,驱动程序会包含初始化序列、指令序列以及数据写入函数,确保液晶屏正常工作并正确显示内容。 4. **PROTUES仿真**:这是一款强大的虚拟原型设计工具,支持多种微控制器和外围设备的仿真。用户可以创建...

    pgAdmin III v1.4.0

    1. **数据库对象管理**:pgAdmin III支持创建、编辑和删除数据库、表、索引、视图、序列、触发器、规则和函数等所有常见的数据库对象。用户可以通过直观的图形界面操作,而无需编写复杂的SQL语句。 2. **SQL编辑器*...

    postgresql客户端pgadmin3-1.8.4

    2. **数据库对象管理**:pgAdmin3允许用户直观地创建、查看和编辑数据库对象,如表、视图、索引、序列、函数、存储过程等。用户可以使用图形界面来定义字段类型、约束、默认值等属性。 3. **SQL查询工具**:内置的...

    pg150-ultrascale-memory-ip.pdf

    - 复位序列:定义了内存IP的初始化流程。 - Clamshell拓扑:一种内存配置方式,允许通过控制器双倍数据速率的访问。 - 迁移特性:在FPGA重构期间保持内存控制器状态的特性。 - MicroBlaze MCU ECC:利用Xilinx的...

    fx 2n+1pg控制4轴的源码

    而1PG模块则是一种脉冲发生器,能够生成精确的脉冲序列,用于驱动伺服电机或步进电机进行精密定位。 1. **FX2N PLC基础** - **内部结构**:FX2N拥有多种类型的输入/输出单元,包括数字量、模拟量和特殊功能模块,...

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

    在金融时间序列分析领域,非参数回归模型的应用是一个研究热点,因为它能够在模型的分布假设不符合实际数据时提供更为灵活和准确的分析结果。 首先,本文研究的焦点是上证综指的收益率数据,时间跨度为1998年至2009...

    pg153-axi-quad-spi.pdf

    根据提供的文件信息,我们可以得知,该文件是XILINX公司发行的关于AXI-Quad-SPI IP核使用手册,具体为AXIQuadSPIv3.2版本的产品指南,文档编号PG153,发布日期为2021年2月4日。这份手册详细介绍了如何在XILINX的...

    PG专场:数据在PG中的升华 -流计算,OLTP,OLAP(德歌).pdf

    这些扩展插件的集成极大地增强了PostgreSQL处理空间数据、时间序列数据的能力,它们在GIS、时间序列分析、流数据处理等场景下发挥着重要作用。 此外,文档提到了各种索引类型,包括但不限于B-tree、hash、GIN、GiST...

    pg090-axi-iic.pdf

    以上是对Xilinx官方的IIC接口IP的datasheet《pg090-axi-iic.pdf》中所包含知识点的详细说明。通过对该文档的阅读和理解,我们可以更好地了解如何在Vivado设计套件中使用Xilinx的IIC接口IP核进行I2C通信设计。

    德哥 _ 阿里云 - 阿里云数据库 PG、PPAS、HDB for PG 云生态、产品指南、企业全栈应用案例、开发管理实践

    ### 阿里云数据库 PG、PPAS、HDB for PG 云生态、产品指南、企业全栈应用案例、开发管理实践 #### 一、PostgreSQL, GPDB 技术发展与云生态 PostgreSQL是一种功能强大的开源关系型数据库管理系统,因其稳定性、安全...

Global site tag (gtag.js) - Google Analytics