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

PostgreSQL查询表空间所在目录的磁盘使用率

原创 仙人掌 2023-09-18
942
脚本功能

查询表空间所在目录的磁盘使用率

脚本使用示例

该环境中表空间test_tsp和pg_default都在根目录下,所以显示了两次根目录的使用率和大小

[postgres@mydb1a tmp]$ psql psql (12.3) Type "help" for help. postgres=# select path, pg_size_pretty(total_size*1024) total_size, pg_size_pretty(use_size*1024) use_size, use_rate from get_disk_info() as aa(path varchar,total_size bigint,use_size bigint,use_rate varchar); NOTICE: table "temp_disk_usage_info" does not exist, skipping path | total_size | use_size | use_rate ------+------------+------------+---------- / | 17 GB | 9695 MB | 61% / | 17 GB | 9695 MB | 61% /tmp | 1231 MB | 4096 bytes | 1% (3 rows) postgres=# \db+ List of tablespaces Name | Owner | Location | Access privileges | Options | Size | Description ------------+----------+----------------+---------------------+---------+---------+------------- pg_default | postgres | | | | 429 MB | pg_global | postgres | | | | 1071 kB | test_tsp | postgres | /app/pg12/tsp | postgres=C/postgres | | 8297 kB | test_tsp1 | postgres | /tmp/test_tsp1 | | | 0 bytes | (4 rows) postgres=# \q [postgres@mydb1a tmp]$ df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.2G 0 1.2G 0% /dev tmpfs 1.3G 52K 1.3G 1% /dev/shm tmpfs 1.3G 804K 1.3G 1% /run tmpfs 1.3G 0 1.3G 0% /sys/fs/cgroup /dev/mapper/openeuler-root 17G 9.5G 6.3G 61% / tmpfs 1.3G 4.0K 1.3G 1% /tmp /dev/sda1 976M 120M 789M 14% /boot tmpfs 247M 0 247M 0% /run/user/0
函数如下
create or replace function get_disk_info() returns setof record as $function$ declare tbs record; sql text; res record; begin sql = 'drop table if exists temp_disk_usage_info'; execute sql; sql = 'create temp table temp_disk_usage_info(path varchar,total_size bigint,use_size bigint,use_rate varchar)'; execute sql; sql = 'select spcname,case when spcname=''pg_default'' then current_setting(''data_directory'') else pg_tablespace_location(oid) end as path from pg_tablespace where spcname<>''pg_global'''; for tbs in execute sql loop sql = 'df '||tbs.path||'|grep -v Used|awk ''{printf"%s,%s,%s,%s\n",$6,$2,$3,$5}'''; sql = 'copy temp_disk_usage_info from program '||quote_literal(sql)||' delimiter '','''; execute sql; end loop; return query select * from temp_disk_usage_info; end; $function$ language plpgsql SECURITY DEFINER;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论