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

作者:瀚高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'


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值