作者:瀚高PG实验室 (Highgo PG Lab)- 海无涯
我们知道Oracle中有object_type字段可以查看一个对象的类型,比如是表还是视图,在postgresql中如何查看呢?
首先,最简单的一种方式:
highgo=# \d+ ht1;
Table "public.ht1"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+--------------------------------------------------+---------+--------------+-------------
id | integer | not null default nextval('ht1_id_seq'::regclass) | plain | |
Replica Identity: FULL
我们可以发现在对象名称前有Table的注明
如果是视图则如下:
highgo=# \d+ pg_settings;
View "pg_catalog.pg_settings"
Column | Type | Modifiers | Storage | Description
-----------------+---------+-----------+----------+-------------
name | text | | extended |
setting | text | | extended |
……
同样的位置有View的注明。
第二种方式和Oracle查询类似:
通过pg_class(系统表)中的relkind字段来判断:
highgo=# select relkind from pg_class where relname='ht1';
relkind
---------
r
(1 row)
highgo=# select relkind from pg_class where relname='pg_settings';
relkind
---------
v
(1 row)
relkind
类型:char
分类:r =普通表,i = 索引,S =序列,v = 视图, c =复合类型,s = 特殊,t =TOAST表
判断表或视图是否存在:
select count(*) from pg_class where relkind='r' and relname='tablename'
select count(*) from pg_class where relkind='v' and relname='tablename'