不可见列
1. 目的
本功能的引入是为了兼容Oracle的不可见列功能,将使数据库设计更加简洁,数据管理的灵活性得到提高,用户可以更好地控制列的可见性。
在应用迁移过程中,不可见列也很有用。使新列不可见意味着它们不会被任何现有应用程序看到,但仍然可以被任何新应用程序引用,从而使应用程序的在线迁移更加简单。
2. 功能说明
不可见列功能使用户能够在执行诸如SELECT * 等操作时隐藏特定列。可以使用不可见列对表进行更改,而不会干扰使用该表的应用程序。对表的任何通用访问都不会显示不可见的列,必须通过列名显式引用不可见列,查询和其他操作才能访问不可见列。
在Oracle模式下,psql的扩展描述命令(\d+)增加了对不可见列的支持。
3. 测试用例
3.2. 向不可见列插入值
只有在INSERT语句中显式指定不可见列时,才能向不可见列插入值。向包含不可见列的表插入值时不能省略列列表,否则会报错。
ivorysql=# INSERT INTO mytable (a, b, c) VALUES (1,2,3);
INSERT 0 1
ivorysql=# INSERT INTO mytable VALUES (4,5,6);
ERROR: INSERT has more expressions than target columns
LINE 1: INSERT INTO mytable VALUES (4,5,6);
3.3. 显示不可见列的输出
使用SELECT语句查询时,如果要显示不可见列信息,必须显式指定该不可见列,否则将不显示该不可见列。
ivorysql=# select * from mytable;
a | c
---+---
1 | 3
(1 row)
ivorysql=# select a,b,c from mytable;
a | b | c
---+---+---
1 | 2 | 3
(1 row)
3.4. 在Oracle模式下psql扩展描述命令(\d+)对不可见列的支持
ivorysql=# \d+ mytable
Table "public.mytable"
Column | Type | Collation | Nullable | Default | Invisible | Storage | Compression | Stats target | Description
--------+-----------------+-----------+----------+---------+-----------+---------+-------------+--------------+-------------
a | pg_catalog.int4 | | | | | plain | | |
b | pg_catalog.int4 | | | | invisible | plain | | |
c | pg_catalog.int4 | | | | | plain | | |
Access method: heap