postgresql中如何判断一个对象是表还是视图?

我们知道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'


BY    海无涯

你可能感兴趣的:(PostgreSQL,Highgo,DB)