前言

随着数据库应用场景的多样化,用户对数据管理的灵活性和隐私性提出了更高要求。IvorySQL 作为一款基于 PostgreSQL 并兼容 Oracle 的开源数据库,始终致力于在功能上保持领先和创新。在最新发布的 4.0 版本中,IvorySQL 新增了 Oracle 兼容特性 Invisible Column(不可见列),这一功能由社区贡献者 Imran Zaheer 提供,体现了开源社区协作的力量

Invisible Column 的引入,为开发者提供了在不影响现有应用的情况下动态调整数据库结构的新选择,进一步提升了 IvorySQL 在数据灵活性管理上的能力,为用户在数据库升级、兼容性优化等方面提供了更大的便利性。

本文将详细介绍这一特性的功能、使用场景以及使用方式。

什么是 Invisible Column?

在现代数据库开发中,列的可见性管理在一定程度上影响了应用程序的灵活性与迁移效率。Oracle 12c 提供了一项强大的功能:Invisible Column(不可见列)。这是一种隐藏数据列的特性,用于增强数据安全性和实现业务逻辑。这一功能为开发者提供了灵活性和控制能力,特别是在应用程序迁移或版本升级的场景中。

在 Oracle 中,Invisible Column 是指那些对大多数 SQL 查询和工具不可见的列。通过将列设置为不可见列:

  • 它不会出现在常规的 SELECT * FROM 查询结果中。
  • 它不会在 SQL*PlusOCI 的描述操作中显示。
  • 它不会包含在基于 %ROWTYPE 属性的记录定义中。

然而,不可见列仍然存在于表中,可以通过显式指定列名来访问或引用。另外,不可见列在使用时也有限制,要注意在外部表(External Tables)、聚簇表(Cluster Tables)、临时表(Temporary Tables)中无法使用不可见列。

Invisible Column 的应用场景

1. 应用程序迁移

不可见列在应用程序迁移过程中非常有用。当我们向现有表中添加新列时,不可见列可以避免影响旧应用程序的功能。旧的应用程序不会察觉新列的存在,而新的应用程序可以显式引用这些列。从而使应用程序的在线迁移变得更加简单顺畅。

2. 敏感数据保护

某些敏感数据可以通过不可见列存储,避免被大多数默认查询工具访问,从而降低意外暴露的风险。

3. 数据模型优化

在数据模型调整或调试过程中,可以临时将一些列设置为不可见列,确保它们不会影响常规查询,避免查询结果混淆。

在 IvorySQL 中使用 Invisible Column

Invisible Column 为 IvorySQL 4.0 版本中新增加的兼容特性,使用前请先确保您的版本为 4.0。

1. 创建不可见列

可以在创建表时直接将列定义为不可见列:

CREATE TABLE employees (
emp_id NUMBER,
emp_name VARCHAR2(50),
emp_salary NUMBER INVISIBLE
);

在此示例中,emp_salary 是不可见列,对默认查询不可见:

select*from employees ;
emp_id | emp_name
--------+----------
(0 rows)

2. 向不可见列插入数据

在向表中插入数据时,可以通过显式指定列名的方式向不可见列插入数据:

INSERT INTO employees(emp_id,emp_name,emp_salary) VALUES(1,'Jack',20000);
INSERT 0 1
INSERT INTO employees(emp_id,emp_name,emp_salary) VALUES(2,'Lucy',30000);
INSERT 0 1;

不带命名列的插入不能包含不可见列:

INSERT INTO employees VALUES(3,'Peter');
INSERT 0 1

3. 显示/修改现有列为不可见列

通过 VISIBLE 关键字,可以将不可见列改回普通列:

ALTER TABLE employees MODIFY emp_salary VISIBLE;
ALTER TABLE

如果需要将现有列设置为不可见列,可以使用 INVISIBLE

ALTER TABLE employees MODIFY emp_salary INVISIBLE;
ALTER TABLE

注意,不能将所有的列设置为不可见列。

4. psql \d 元命令

在 psql 中使用 \d 元命令时不会显示该表的不可见列信息:

\d employees
Table "public.employees"
Column | Type | Collation | Nullable | Default
------------+--------------+-----------+----------+---------
emp_id | number | | |
emp_name | varchar2(50) | | |
emp_salary | number | | |

可以使用含有更多表信息的 \d+ 元命令查看该表的不可见列信息:

\d+ employees
Table "public.employees"
Column | Type | Collation | Nullable | Default | Invisible | Storage | Compression | Stats target | Description
------------+--------------+-----------+----------+---------+-----------+----------+-------------+--------------+-------------
emp_id | number | | | | | main | | |
emp_name | varchar2(50) | | | | | extended | | |
emp_salary | number | | | | invisible | main | | |
Access method: heap

5. 访问 Invisible Column

在使用 SELECT* 查询表数据时,不会显示不可见列的数据:

SELECT * FROM employees ;
emp_id | emp_name
--------+----------
1 | Jack
2 | Lucy
3 | Peter
(3 rows)

虽然不可见列对默认查询不可见,但开发者仍然可以通过显式指定列名来访问它:

SELECT emp_name,emp_salary FROM employees ;
emp_name | emp_salary
----------+------------
Jack | 20000
Lucy | 30000
Peter |
(3 rows)

结语

不可见列功能是一项设计精妙的特性,为数据库开发和管理提供了更高的灵活性和安全性。通过合理利用不可见列,开发者可以轻松应对复杂的应用迁移场景,同时保持系统的稳定性和可扩展性。

如果您有正在使用 IvorySQL 数据库的项目,不妨尝试将此功能集成到您的解决方案中,提升整体效率和可靠性。

IvorySQL 4.0 之 Invisible Column 功能解析的更多相关文章

  1. 微信小程序0.11.122100版本新功能解析

    微信小程序0.11.122100版本新功能解析   新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...

  2. MySQL 8.0有什么新功能

    https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载 ...

  3. GoldenGate 12.2 支持不可见列invisible column的复制

    Oracle Goldengate 12.2现在可以复制不可见列,在以前的版本中是没有此项功能的.示例:在源和目标都创建一个不可见和虚拟列commission SQL>  create tabl ...

  4. Unity5 新功能解析--物理渲染与standard shader

    Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5 ...

  5. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  6. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  7. [国嵌攻略][047][MMU功能解析]

    MMU功能解析 1.Memory Management Unit(存储器管理单元) 2.两个进程读取同一个地址能读到不同的值.因为进程访问的是虚拟地址,通过MMU转换成不同的物理地址.不同的进程通过M ...

  8. SpringBoot2.0小程序支付功能实现weixin-java-pay

    SpringBoot2.0小程序支付功能实现weixin-java-pay WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等 ...

  9. Lemon OA第2篇:功能解析方法

    Lemon OA,整个系统功能也算是比较丰富,OA的很多功能都能看见影子,虽然做得不是很强大 接触Lemon OA,起源于Activiti的学习热情,既然这样,研究Lemon OA的目标有3: 1.L ...

  10. HTML5新表单新功能解析

    HTML5新增了很多属性功能.但是有兼容性问题,因为这些表单功能新增的.我这里做了一个简单的练习,方便参考.如果完全兼容的话,那我们写表单的时候就省了很多代码以及各种判断. <!DOCTYPE ...

随机推荐

  1. Pycharm创建工程及运行程序入门教程

    pycharm基础使用步骤 1.下载pycharm2.新建Python工程(1)如下,点击Create New Project (2)选择保存位置,点击create. (3)命名,打开界面如下 (4) ...

  2. Kubernetes GPU 虚拟化方案

    主流架构 Device Plugin:K8s制定设备插件接口规范,定义异构资源的上报和分配,设备厂商只需要实现相应的API接口,无需修改kubelet源码即可实现对其他硬件设备的支持. Extende ...

  3. 推荐4款基于.NET开源、功能强大的CMS建站系统

    前言 CMS系统作为一种强大的内容管理工具,在数字化时代发挥着越来越重要的作用.无论是个人博客还是大型企业官网,选择一个合适的CMS都能极大地提高效率和用户体验.今天大姚给大家推荐4款基于.NET开源 ...

  4. HBase-2JavaAPI操作

    HBase是一个分布式的NoSql数据库,在实际工作当中,我们一般都可以通过JavaAPI来进行各种数据的操作,包括创建表,以及数据的增删改查等等 1 创建maven工程 讲如下内容作为maven工程 ...

  5. runoob-pandas(python)

    https://www.runoob.com/pandas/pandas-tutorial.html Pandas 教程 Pandas 是 Python 语言的一个扩展程序库,用于数据分析. Pand ...

  6. 在 Windows 10 上实现免密码 SSH 登录

    前言 在日常开发中,SSH(Secure Shell)作为一种安全的远程登录协议,广泛用于 Linux 和 Windows 系统之间的连接.为了提高效率,我们可以通过配置免密码登录,省去每次连接时输入 ...

  7. 文章学习|开放,让5G网络更智能

    学习文章:开放,让5G网络更智能 介绍 从2G到5G,网络在不断发展,通信行业的生态系统在不断演进,运营商的角色也发生着改变. 在2G和3G时代,运营商作为服务提供商为用户提供通信业务和互联网业务,获 ...

  8. HTTP劫持

    HTTP劫持 想了解什么是HTTPS,要先知道什么是HTTP HTTP HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件,图片文件,查询结果等,一般基于B/S架构, ...

  9. 独立看门狗IWDG

    一.简介     STM32F10xxx内置两个看门狗(独立看门狗是12位递减计数器,窗口看门狗是7位递减计数器),提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门 ...

  10. 容器的优势,在Docker中运行Tomcat

    本文分享自天翼云开发者社区<容器的优势,在Docker中运行Tomcat>,作者:d****e 一.容器与虚拟机的区别是什么 虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统,常见 ...