熟悉PostgreSQL的都知道,PG12 开始,不再支持OID伪列。KingbaseES 为了保证与旧版本兼容,特增加了OID 隐含列的支持。

  • R3版本:OID 是整个数据库共用的“序列”对象;是4字节的无符号整型,其最大值40亿;会循环,不能使用OID来保证数据唯一,需要唯一性索引保证数据唯一;
  • R6版本:OID 是特定表对象私有的序列,在创建表时,会顺带创建序列;序列的最大值是 2147483647 , 不会循环;要想保证OID唯一,同样需要创建唯一索引;

参数 default_with_oids 默认为 off ,表示默认建表不带 OID,但可以在建表时 加 with OIDS选项。

可以对OID 创建索引:create index ind_tab3 on tab3(oid);

隐含列

隐含列为表中各个列的一个特殊的属性,可以在建表过程中指定,也可以通过表的ALTER 语句变更某一列的隐含属性,具体语法可以参考创建表语法和ALTER TABLE 语法。

CREATE TABLE IMPLICT_T1(
OID INT INVISIBLE,
B INT,
);
ALTER TABLE IMPLICT_T1 MODIFY OID VISIBLE;
ALTER TABLE IMPLICT_T1 MODIFY NAME INVISIBLE;

如果一个列被标记为隐含列之后,所有非指定该列的DML 行为,例如SELECT *、COPY、bulkload 等等,都会忽略该列。而所有指定该列的语句,都会命中该列。

-- INSERT 语句需要指定隐含列
INSERT INTO IMPLICT_T1(OID, B, NAME) VALUES(1, 2, 'IMPLICT');

-- 查询语句不指定隐含列,将忽略该列
SELECT * FROM IMPLICT_T1;
postgres=# select * from implict_t1;
b | name
---+---------
2 | implict
(1 row)

参考Oracle 的特性,所有列都赋予了一个COLUMN ID 的属性,COLUMN ID 从1 开始,如果某一列被设置为隐含列,那么它的COLUMN ID 则设置为NULL。

OID 与隐含列的更多相关文章

  1. oracle 12c中的隐含列

      Invisible Columns 使用select * from ,desc 等看不到该列, DROP TABLE tab1 PURGE; CREATE TABLE tab1 ( id NUMB ...

  2. PostgreSQL隐藏字段tableoid

    问题来源: 今天群里有人问:tableoid字段在每行都有,而且一个表里面的值是重复的,这样不合理...... 因此做了一些分析: 1)创建了一个表 apple=# \d test_time Tabl ...

  3. PostgreSQL隐藏字段

    1)创建了一个表 apple=# \d test_time Table "public.test_time" Column | Type | Modifiers --------+ ...

  4. 1Z0-050

    QUESTION 13 View the Exhibit.Examine the following command that is executed for the TRANSPORT table ...

  5. 理解 Statement 和 PreparedStatement

    java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...

  6. SHARE NOTHING SHARE EVERYTHING

    http://mp.weixin.qq.com/s?__biz=MjM5ODYwMjI2MA==&mid=2649736156&idx=1&sn=23931f48282f6ef ...

  7. Oracle数据库入门——物化视图日志结构

    物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当 ...

  8. oracle在线重定义表

    在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...

  9. 深入 理解 Statement 和 PreparedStatement

    一.使用Statement而不是PreparedStatement对象 JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们 ...

随机推荐

  1. 基于thinkphp6 layui的优秀极速后台开发框架推荐

    很多时候我们在做项目开发的时候,苦于没有好一点的轮子,自己动手开发的话,太耗费时间了,如果采用VUE的话,学习成本跟调试也比较麻烦, 而且有时候选用的东西甲方也不太容易接受,现在给大家介绍一款优秀的极 ...

  2. UiPath Excel修改操作

    一.Excel 修改操作 1.删除行 (1)控件介绍 Insert/Delete Rows: 在特定位置添加或删除指定数量的行         常用属性介绍: Destination: NoRows: ...

  3. python小题目练习(13)

    题目:封装用户的上网行为 实现代码: """Author:mllContent:封装用户的上网行为Date:2020-01-19"""def ...

  4. dotnet 控制台 使用 Microsoft.Maui.Graphics 配合 Skia 进行绘图入门

    本文将告诉大家如何在 dotnet 的控制台模式下,采用 MAUI 自绘库 Microsoft.Maui.Graphics 进行绘图,设置 Microsoft.Maui.Graphics 底层调用 M ...

  5. go-zero微服务实战系列(九、极致优化秒杀性能)

    上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积.消费延迟. ...

  6. Oracle数据库常用查询语句

    1.[oracle@dbserver ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 15 15:1 ...

  7. SpringBoot之MongoDB附件操作

    前言 近期自己针对附件上传进一步学习,为了弥足项目中文件上传的漏洞,保证文件上传功能的健壮性和可用性,现在我将自己在这一块的心得总结如下: 一.pom.xml依赖的引入 <dependency& ...

  8. Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(C,D题解)

    Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round C - Zero Path 在这道题目中,不可以真正地进行寻 ...

  9. 9.2 DAG上的动态规划

    在有向无环图上的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路,最短路或路径计数问题 9.2.1 DAG模型 嵌套矩形问题: 矩形之间的可嵌套关系是一种典型的二元关系,二元关系可以 ...

  10. std::hash<std::pair<int, int> >

    标题是搞笑的 ! 这个问题只需要 since C++11 问题:怎么让 unordered_map 支持使用 pair 作为 key? 如果你能把两个东西压到一个基本类型里那么就不用解决这个问题了 . ...