oracle 12cR1新增了隐藏列的功能,在之前的版本中,为了隐藏重要的数据字段以避免在通用查询中显示,我们往往会创建一个视图来隐藏所需信息或应用某些安全条件,现在我们可以通过隐藏列来实现这一功能。

同时,当我们需要删除一张表的某一列时,如果系统正在允许时直接删除必然会锁表,且数据量大时会锁住很久。这时我们也可以通过隐藏列先将该列隐藏,因为该操作是直接修改数据字典,并没有正在删除数据,等闲时再drop掉该列即可。

另外oracle的隐藏列有几个注意点:
1、可以将主键、外键都隐藏,但是隐藏之后不能恢复;
2、临时表、外部表、集群表均不支持隐藏列

例子:
–建表插入数据

SQL> create table test(id int,id1 int,id2 int,id3 int);  Table created.SQL> insert into test values(1,2,3,4);  1 row created.SQL> commit;Commit complete.

–查看

SQL> desc test;Name                                      Null?    Type----------------------------------------- -------- ----------------------------ID                                                 NUMBER(38)ID1                                                NUMBER(38)ID2                                                NUMBER(38)ID3                                                NUMBER(38)SQL> select * from test;ID        ID1        ID2        ID3
---------- ---------- ---------- ----------1          2          3          4

–将id2列设置为隐藏列

SQL> alter table test modify id2 invisible;  Table altered.

–再次查看和插入数据

SQL> select * from test;ID        ID1        ID3
---------- ---------- ----------1          2          4
SQL> desc test;Name                                      Null?    Type----------------------------------------- -------- ----------------------------ID                                                 NUMBER(38)ID1                                                NUMBER(38)ID3                                                NUMBER(38)SQL> insert into test values(11,12,13,14);
insert into test values(11,12,13,14)*
ERROR at line 1:
ORA-00913: too many values

–指定列查看和插入数据

SQL> insert into test(id,id1,id2,id3) values(11,12,13,14); 1 row created.SQL> select id,id1,id2,id3 from test;  ID        ID1        ID2        ID3
---------- ---------- ---------- ----------1          2          3          411         12         13         14

那么在pg中隐藏列该如何实现呢?
目前的pg版本中还不支持隐藏列这一功能,将来可能支持,但是我们可以实现类似的功能。

1、使用oid实现隐藏列的功能:
oid为隐藏列。但是最大只能存储40亿条。也就是单表的记录数不能超过40亿,否则可能重复。

bill=# create table st5 (id int, info text, crt_time timestamp) with (oids);
CREATE TABLE
bill=# alter table st5 add constraint pk_st5 primary key(oid);
ALTER TABLE
bill=# insert into st5 values (1,'a',now());
INSERT 81965 1
bill=# select * from st5;  id | info |         crt_time
----+------+---------------------------1 | a    | 2020-01-13 20:55:38.38011
(1 row)bill=# select oid,* from st5;  oid  | id | info |         crt_time
-------+----+------+---------------------------81965 |  1 | a    | 2020-01-13 20:55:38.38011
(1 row)

2、使用继承表实现类似功能
实现思路:
pg inherits,继承表增加隐藏字段,真实的数据存储在继承表,主表是用户使用的表(没有隐藏字段)。使用触发器,将数据写入到继承表。

需要注意的是,复制时,解析出来的是继承表的变化,而不是主表。

bill=# create table orig (id int, info text, crt_time timestamp);
CREATE TABLE
bill=# create table hid_orig (id int, info text, crt_time timestamp, hid serial8 primary key) inherits(orig);
NOTICE:  merging column "id" with inherited definition
NOTICE:  merging column "info" with inherited definition
NOTICE:  merging column "crt_time" with inherited definition
CREATE TABLE
bill=# create or replace function tg() returns trigger as $$
bill$# declare
bill$# begin
bill$#   insert into hid_orig (id,info,crt_Time) values (new.*);
bill$#   return null;
bill$# end;
bill$# $$ language plpgsql strict;
CREATE FUNCTION
bill=# CREATE FUNCTION
bill=# create trigger tg before insert on orig for each row execute procedure tg();
CREATE TRIGGER
bill=# insert into orig values (1,'test',now());
INSERT 0 0
bill=# select * from orig;  id | info |          crt_time
----+------+----------------------------1 | test | 2020-01-13 20:57:12.855603
(1 row)bill=# select * from hid_orig;  id | info |          crt_time          | hid
----+------+----------------------------+-----1 | test | 2020-01-13 20:57:12.855603 |   1
(1 row)bill=# update orig set info='new' where id=1;
UPDATE 1
bill=# select * from orig;  id | info |          crt_time
----+------+----------------------------1 | new  | 2020-01-13 20:57:12.855603
(1 row)bill=# select * from hid_orig;  id | info |          crt_time          | hid
----+------+----------------------------+-----1 | new  | 2020-01-13 20:57:12.855603 |   1
(1 row)

PostgreSQL隐藏列(兼容oracle)相关推荐

  1. PostgreSQL hint用法(兼容oracle)

    Hint是Oracle数据库中很有特色的一个功能,pg和oracle的优化器一样也是CBO(基于成本的).但是在pg中是没有hint的,但是我们可以去通过设置成本因子,设置优化器开关等方式来" ...

  2. postgres oracle 兼容,PostgreSQL嵌套表(兼容oracle)

    oracle中的嵌套表是某些行的集合,它在主表中表示为其中的一列.对主表中的每一条记录,嵌套表可以包含多个行. 通俗地说,嵌套表就是表中的表,把一个表中的字段定义为一个表,这个字段表的数据存储在外部的 ...

  3. oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)

    oracle11g开始支持的listagg函数替代了wmconcat来实现行列转换的功能. listagg函数的用法: oracle行列转换例子: -建表https://www.cndba.cn/fo ...

  4. postgresql 数据库表隐藏列 oid、tableoid、ctid、xmin、xmax、cmin、cmax

    os: centos 7.4 db: postgresql 10.11 oid.tableoid.ctid.xmin.xmax.cmin.cmax 这些都是 postgresql 数据库表的隐藏列. ...

  5. PostgreSQL实现USERENV函数(兼容oracle)

    oracle中使用USERENV 函数来获取当前会话变量的函数,支持的参数有: CLINET_INFO 返回最高可达64个字节存储的用户会话信息,可由应用程序使用DBMS_APPLICATION_IN ...

  6. oracle 临时表存在哪里_openGauss魔改PG?它能兼容Oracle的数据库表吗?

    作者介绍 洪烨,openGauss Contributor,多年银行业系统架构设计及DBA实战经验,<DB2数据库内部解析与性能调优>作者. openGauss的前世今生 上一篇看到很多朋 ...

  7. oracle中orand使用,Postgres兼容Oracle研究——orafce调研

    一.背景 PostgreSQL是和Oracle最接近的企业数据库,包括数据类型,功能,架构和语法等几个方面.甚至大多数的日常应用的性能也不会输给Oracle. 但是Oracle有些函数或者包,默认Po ...

  8. 达梦数据库兼容Oracle之SQL语法(一)

    对于刚从Oracle数据库转到达梦数据库,SQL语法的使用基本一致,有一些差别,下面总结的一些常用SQL语法差别. 文章目录 1.导入数据 2.返回查询数据的返回行 3 外连接用法 4.多列IN用法 ...

  9. oracle 11g dul,【学习笔记】Oracle DUL 11 兼容Oracle 12C数据库的DUL工具最新版本

    天萃荷净 oracle dul 11 正式发布,迫不及待的下载来测试,现在版本号为dul 11.2.0.0.1,目前只发布了for linux,其他版本估计要等等.期待该版本有引进新功能 1.orac ...

最新文章

  1. 生鲜电商APP开发,有哪五大商机?
  2. sata接口_固态硬盘应该怎么选?是SATA接口还是M.2接口好
  3. java内存对象模型
  4. Spark SQL 1.x之SQL Context使用
  5. 希赛软件设计师视频教程-3.1 进程(第三部分) 标清
  6. windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...
  7. 申通快递机器人上岗_【峰暴】618, 数万台机器人上岗为您服务!
  8. 力扣-547 省份数量
  9. iOS开发之模拟器(simulator)的复制粘贴
  10. php防止网站被镜像,网站防止被其他站iframe框架引用镜像的方法
  11. 如何理解t检验、t分布、t值?
  12. vb可以开发用c语言,c语言和vb语言的区别是什么?_后端开发
  13. 微信可以用邮箱吗?邮箱无法分享到微信怎么办?微信邮箱从哪找呢
  14. Java筑基10-封装继承多态(重点)
  15. 前度字符串转数组_leetcode每日一题
  16. 计算机编程课是学什么的,编程是什么课程
  17. 17计算机七班班级活动,2017班级主题活动方案设计
  18. FFmpeg视频录制(WIN)
  19. 今天拿到软件设计师证书
  20. 视频编码中CBR和VBR的区别

热门文章

  1. 软件设计七大原则实战(二)-开闭原则
  2. 我要的精致:人间有茶是清欢
  3. 你知道吗?除了迅雷,这几款下载神器也不错!
  4. 免费临时网页邮箱(可丢弃式邮箱)
  5. ubuntu系统的文件权限获取
  6. 互联网金融数据分析体系
  7. 占位符语法-Scala
  8. 网易运营微专业_用户运营
  9. windows删除注册表中多余信息及卸载残余应用
  10. 数据分享|多变量多元多项式曲线回归线性模型分析母亲吸烟对新生婴儿体重影响可视化...