1.创建一张表test_hide_attr,通过这张表获知Postgresql表的隐藏属性。
1
2
|
test_zqs=#
create
table
test_hide_attr(hideint4);
CREATE
TABLE
|
2.查询Postgresql的系统表pg_class,该表存储数据库对象信息,如表、视图、索引等。一个元组存储一个数据库对象信息,并且每一个都会被分配一个oid作为唯一标识,该oid将作为该元组的一个隐藏属性存储。其中relname字段代表数据库对象的名称。
3.查询系统表pg_attribute,该表用来存储表的属性信息,包括隐藏属性,一个属性对应一个元组。其中,attrelid代表属性所属表的oid,而attname则代表属性名称。
1
2
3
4
5
6
7
8
9
10
11
|
test_zqs=#
select
attrelid,attname
from
pg_attribute
where
attrelid=17168;
@H_403_117@
attrelid|attname
----------+----------
@H_403_117@
17168|cmax
@H_403_117@
17168|cmin
@H_403_117@
17168|ctid
@H_403_117@
17168|hide
@H_403_117@
17168|tableoid
@H_403_117@
17168|xmax
@H_403_117@
17168|xmin
(7
rows
)
|
4.对表test_hide_attr,实际用户仅创建了hide字段,其余字段均为该表的隐藏字段。
5.查看表隐藏属性tableoid、pg_class隐藏属性oid、pg_attribute属性attrelid三者之间是相同的(对同一张表来说)
1
2
3
4
5
6
7
|
下面,对表的隐藏属性所代表的含义做了些整理,见下文
@H_881_502@delete from emp a
where a.ctid <>
(
select min(b.ctid) from emp b
where a.id = b.id
);