您的位置:首页 > 数据库

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

2018-02-07 11:18 253 查看
我们知道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    海无涯
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: