暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Halo数据库系统基础视图介绍篇

贾桂权 2024-09-27
75

前言:

任何一种数据库的学习都离不开系统表和视图,所以今天为大家带来我们HaloDB中常用的系统视图介绍。

如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,当然您如果有好的建议也可以提给我们,下面正式开始今天的内容。

还有,此篇文章的编写,离不开熊灿灿老师的鼎力帮助,为我提供了很多的参考资料以及写作思路,在此对熊灿灿老师提供的帮助表示衷心的感谢。

一、系统常用视图:

本篇文章为大家介绍在我们的HaloDB中日常工作使用频率较高的几个系统视图,详细介绍如下。

1、pg_database:

pg_database存储关于可用数据库的信息。和大多数系统表不同,pg_database 是在一个集群里的所有数据库共享的:每个集群只有一份 pg_database 拷贝,而不是每个数据库一份。

以下是详细介绍:


下面为大家介绍几种常用的使用方法:

示例1:使用pg_database查询数据库的显示情况

testzz=# select * from pg_database;
oid | datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace | datacl
-------+-----------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+------------+---------------+-------------------------
14509 | halo0root | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14508 | 767 | 1 | 1663 |
1 | template1 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | t | -1 | 14508 | 732 | 1 | 1663 | {=c/halo,halo=CTc/halo}
14508 | template0 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | f | -1 | 14508 | 732 | 1 | 1663 | {=c/halo,halo=CTc/halo}
16385 | testzz | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14508 | 732 | 1 | 33179 |
24987 | halozz1 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14508 | 732 | 1 | 1663 | {=Tc/halo}

在这里testzz和halozz1两个数据库是我自己自定义创建的。

示例2:使用pg_database视图结合查询ORDER BY字句查询数据库大小

testzz=# SELECT datname, pg_database_size(datname) AS size FROM pg_database ORDER BY size DESC;
datname | size
-----------+---------
testzz | 9350171
template1 | 8995331
template0 | 8995331
halozz1 | 8995331
halo0root | 7875611
(5 rows)

没有单位,看着不方便,那我们使用pg_size_pretty优化一下显示:

testzz=# SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database ORDER BY size DESC;
datname | size
-----------+---------
testzz | 9131 kB
template1 | 8785 kB
template0 | 8785 kB
halozz1 | 8785 kB
halo0root | 7691 kB
(5 rows)

示例3:使用pg_database 查询数据库最大连接数设置,-1代表无限制

testzz=# SELECT datname, datconnlimit FROM pg_database ORDER BY datname;
datname | datconnlimit
-----------+--------------
halo0root | -1
halozz1 | -1
template0 | -1
template1 | -1
testzz | -1
(5 rows)

2、pg_class视图:

pg_class是系统目录中的一个系统表,用于存储数据库中所有表、索引、序列、视图和其他对象的元数据信息。它是PostgreSQL中最重要的系统表之一,提供了关于数据库对象的详细信息。

下面是详细介绍:


示例4:查看指定对象表测试表的模式

testzz=# SELECT relname,relnamespace,nspname FROM pg_class c,pg_namespace n WHERE relname = 'emp' AND relnamespace = n.oid;
relname | relnamespace | nspname
---------+--------------+---------
emp | 2200 | public
(1 row)

示例5:查看指定表对象测试表的owner(即role)

testzz=# select relname,rolname from pg_class c,pg_authid au where relname = 'emp' and relowner = au.oid;
relname | rolname
---------+---------
emp | halo
(1 row)

3、pg_stats:

pg_stats视图提供对存储在pg_statistic目录中信息的访问,一般用作记录每个表以及字段的统计信息,以便PostgreSQL优化器做执行计划选择的时候提供参考。下面是字段的详细介绍


示例6查看表的统计信息

-- 使用方式:
SELECT * FROM pg_stats WHERE tablename = 'your_table_name';
--以emp表为例:
testzz=# select schemaname,tablename,attname,avg_width from pg_stats WHERE tablename = 'emp'; schemaname | tablename | attname | avg_width
------------+-----------+---------+-----------
(0 rows)

示例7:查看特定列的统计信息

-- 使用方式:
SELECT * FROM pg_stats WHERE tablename = 'your_table_name' AND attname = 'your_column_name';
--以emp表为例:
testzz=# SELECT * FROM pg_stats WHERE tablename = 'emp' AND attname = 'ename';
schemaname | tablename | attname | inherited | null_frac | avg_width | n_distinct | most_com
mon_vals | most_common_freqs | histogram_bounds | correlation | most_common_elems | most_comm
on_elem_freqs | elem_count_histogram
------------+-----------+---------+-----------+-----------+-----------+------------+---------
---------+-------------------+------------------+-------------+-------------------+----------
--------------+----------------------
(0 rows)

4、pg_tables视图

pg_tables视图提供了对有关数据库中每个表的有用信息的访问,并且pg_tables视图是HaloDB数据库中的一个系统视图,用于列出当前数据库中的所有表的信息,包括表名、所属模式、所有者等。下面是字段的详细介绍。


示例8:查看当前数据库中的所有表:

SELECT tablename FROM pg_tables;
testzz=# SELECT tablename FROM pg_tables;
tablename
-------------------------
dept
bonus
salgrade
halodbt1
t1
emp1
emp
pg_statistic
(篇幅过长,省略。。。)

(76 rows)

示例9:查看特定模式下的所有表

testzz=# SELECT * FROM pg_tables WHERE schemaname = 'emp';
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | row
security
------------+-----------+------------+------------+------------+----------+-------------+----
---------
(0 rows)

最后:

这篇文章确实写了很久,思前想后,先选出来了几个比较有代表意义的视图来给大家作为入门基础使用,当然在我们工作中常用的视图也不止这些,后面还会再拿出来详细介绍和展开。如果有对我们HaloDB感兴趣的朋友欢迎通过我主页的联系方式与我取得联系,体验和使用我们的HaloDB,各位专家大神的宝贵意见我们非常乐于接受。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论