openGauss 中的 sequence 跟 Oracle 的 sequence 有什么区别?

openGauss 中也提供了 sequence 序列功能,使用 Oracle 的用户应该都非常喜欢使用这个功能。所以如果从 Oracle 迁移到 openGauss,那么这项功能可以完全替代了。

接下来我们简单测试一下:

enmotech=> drop table test;

DROP TABLE

enmotech=> create table test(id serial,name varchar(20));

NOTICE: CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"

CREATE TABLE

enmotech=> \d+ test

Table "public.test"

Column | Type | Modifiers | Storage | Stats target | Description

--------+-----------------------+---------------------------------------------------+----------+--------------+-------------

id | integer | not null default nextval('test_id_seq'::regclass) | plain | |

name | character varying(20) | | extended | |

Has OIDs: no

Options: orientation=row, compression=no

enmotech=> insert into test values (nextval('test_id_seq'),'enmotech');

INSERT 0 1

enmotech=> insert into test values (nextval('test_id_seq'),'killdb.com');

INSERT 0 1

enmotech=> insert into test values (nextval('test_id_seq'),'www.killdb.com');

INSERT 0 1

enmotech=> select * from test;

id | name

----+----------------

2 | enmotech

3 | killdb.com

4 | www.killdb.com

(3 rows)

同时我们也可以单独创建序列,然后指定给某个表所使用,如下是 create sequence 的语法:

CREATE SEQUENCE name [ INCREMENT [ BY ] increment ]

[ MINVALUE minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE]

[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE ]

[ OWNED BY { table_name.column_name | NONE } ];

接下来我们单独创建使用 sequence 试试:

enmotech=> create sequence kill_seq cache 1000;

CREATE SEQUENCE

enmotech=>

enmotech=> drop table test;

DROP TABLE

enmotech=> create table test(id int not null default nextval('kill_seq'),name varchar(200));

CREATE TABLE

enmotech=>

enmotech=> \d+ test

Table "public.test"

Column | Type | Modifiers | Storage | Stats target | Description

--------+------------------------+------------------------------------------------+----------+--------------+-------------

id | integer | not null default nextval('kill_seq'::regclass) | plain | |

name | character varying(200) | | extended | |

Has OIDs: no

Options: orientation=row, compression=no

enmotech=> alter sequence kill_seq increment by 10 NOCYCLE;

ERROR: ALTER SEQUENCE is not yet supported.

enmotech=>

enmotech=> \d+ kill_seq

Sequence "public.kill_seq"

Column | Type | Value | Storage

---------------+---------+---------------------+---------

sequence_name | name | kill_seq | plain

last_value | bigint | 1000 | plain

start_value | bigint | 1 | plain

increment_by | bigint | 1 | plain

max_value | bigint | 9223372036854775807 | plain

min_value | bigint | 1 | plain

cache_value | bigint | 1000 | plain

log_cnt | bigint | 32 | plain

is_cycled | boolean | f | plain

is_called | boolean | t | plain

uuid | bigint | 0 | plain

enmotech=> alter sequence kill_seq nomaxvalue;

ALTER SEQUENCE ^

enmotech=> alter sequence kill_seq cache 10000;

ERROR: ALTER SEQUENCE is not yet supported.

enmotech=> alter sequence kill_seq start 888;

ERROR: ALTER SEQUENCE is not yet supported.

enmotech=> \d+ kill_seq

Sequence "public.kill_seq"

Column | Type | Value | Storage

---------------+---------+---------------------+---------

sequence_name | name | kill_seq | plain

last_value | bigint | 1000 | plain

start_value | bigint | 1 | plain

increment_by | bigint | 1 | plain

max_value | bigint | 9223372036854775807 | plain

min_value | bigint | 1 | plain

cache_value | bigint | 1000 | plain

log_cnt | bigint | 0 | plain

is_cycled | boolean | f | plain

is_called | boolean | t | plain

uuid | bigint | 0 | plain

尽管 sequence 的属性跟 Oracle 类似,但是我们可以看到,目前 openGauss 暂时还不支持 alter sequence 的方式去修改序列增长步长或其他属性。只能修改 owner 属主。 查了一下官方文档,发现 alter sequence 只支持如下的语法操作:

ALTER SEQUENCE [ IF EXISTS ] name

[MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE]

[ OWNED BY { table_name.column_name | NONE } ] ;

需要注意的是,openGauss 中的 sequence 跟 Oracle 中的序列不一样的是,Oracle 由于集群的原因,序列还存在一个 order 或 noorder 选项。但在 openGauss 中 sequence 是不存在这个属性的。

openGauss中的sequence跟Oracle的sequence有什么区别?的更多相关文章

  1. Hibernate用Oracle的sequence生成自增Id

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBL ...

  2. Oracle序列(Sequence)创建、使用、修改、删除

    Oracle对象课程:序列(Sequence)创建.使用.修改.删除,序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成.创建序 ...

  3. oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...

  4. Oracle 序列(sequence)

    序列(sequence) 是Oracle提供的用于生成一系列唯一数字的数据库对象.它会自动生成顺序递增或者递减的序列号,以实现自动提供唯一的主键值.序列可以在多用户并发环境中使用,并且可以为所有用户生 ...

  5. Oracle:sequence问题研究

    一直以来,以为sequence是不间断地持续增长的:但今天发现sequence是会跳号,这种情况发生在RAC环境下.在单实例环境下,应该不存在的. sequence截图如下: 数据库表中发生了跳号: ...

  6. 【cl】oracle之Sequence

    sequence:序列 首先要有create sequence或者create any sequence权限: 1.语法如下: create sequence  cltest---序列名 increm ...

  7. oracle创建sequence序列语法

    在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系 1.create sequence create sequence SEQ_LOG_ID minval ...

  8. oracle关于sequence的个人理解

    oracle关于sequence的个人理解 1. sequence在多用户使用时的同步问题 个人感觉sequence是以连接(会话)为基础,类似于java中使用mysql的一个connection 网 ...

  9. JDBC读取新插入Oracle数据库Sequence值的5种方法

    Oracle的sequence实现非常灵活,所以也带来一些易用性问题,如何取到新插入记录生成的sequence值与其它数据库有较大差别,本文详国介绍了5种实现读取新插入记录sequence值的方法. ...

  10. Oracle Metric sequence load elapsed time

    Oracle Metric sequence load elapsed time The sequence load elapsed time Oracle metric is the amount ...

随机推荐

  1. ElkStack-MACOS搭建

    目录 简介 Elasticsearch Logstash/Filebeats Kibana 架构流程 安装配置 版本 先决条件 brew Elasticsearch mac安装elasticsearc ...

  2. debian手册摘要

    apt-get source 包名 # 获取源码dpkg --info deb包名 # 查看包信息apt-cache show 包名 # 包信息(含有Depends.Suggests.Section. ...

  3. 探索浏览器录屏Web API 接口的应用前景与限制

    一.浏览器录屏Web API 接口的优点: 简化录屏流程:浏览器录屏Web API 接口可以直接在网页中调用,无需安装额外的插件或软件,简化了录屏的流程. 实时录制与传输:Web API 接口可以实时 ...

  4. 关于Java并发多线程的一点思考

    写在开头 在过去的2023年双11活动中,天猫的累计访问人次达到了8亿,京东超60个品牌销售破10亿,直播观看人数3.0亿人次,订单支付频率1分钟之内可达百万级峰值,这样的瞬间高并发活动,给服务端带来 ...

  5. 深入解析ASP.NET Core MVC的模块化设计[下篇]

    ASP.NET Core MVC的"模块化"设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载.<设计篇>介绍了 ...

  6. C++ Qt开发:运用QThread多线程组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QTh ...

  7. 2022 Gartner RPA魔力象限,弘玑Cyclone位置飞跃国产RPA进击全球

    文/王吉伟 7月25日,国际权威分析机构Gartner发布了2022全球RPA魔力象限报告(Gartner RPA MQ),UiPath.Automation Anywhere.微软等来自全球的15家 ...

  8. XAF Blazor TabbedMdi

    开源项目地址:https://gitee.com/easyxaf/blazor-tabbed-mdi 前言 XAF在WinForm中采用了多文档界面(MDI),但在Blazor中却没有,在官网中也有人 ...

  9. Windows10 Linux 子系统的骚操作之 Ctrl+Alt+T shell启动终端

    巨硬的 WSL(Windows Subsystem for Linux)是真的好用 但是,由于本人比较喜欢按快捷键.所以一直想着找到Windows上安装的ubuntu.exe文件,搞个快捷方式,然后再 ...

  10. 网络流媒体协议的联系与区别 (RTP RTCP RTSP RTMP HLS)(转)

    网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) RTP RTCP RTSP RTMP HLS 区别与联系 RTP传输流媒体数据.RTCP对RTP进行控制,同步.RTSP发起 ...