当前位置: 首页 > news >正文

PostgreSQL查看表的大小

PostgreSQL查看表的大小

在 PostgreSQL 中,可以使用一系列函数和系统视图来查看表的大小。这些工具可以帮助您获取表的基本存储大小、包括索引和 TOAST 的总大小等信息。下列方法演示了如何获取这些信息。

使用函数查看表的大小

  1. pg_relation_size():返回表的基础存储大小(不包括索引和 TOAST 数据)。
SELECT pg_relation_size('your_table_name');
  1. pg_table_size():返回表的总大小,包括基础存储和 TOAST 数据,但不包括索引。
SELECT pg_table_size('your_table_name');
  1. pg_indexes_size():返回表的所有索引的总大小。
SELECT pg_indexes_size('your_table_name');
  1. pg_total_relation_size():返回表的总大小,包括基础存储、TOAST 数据和所有索引。
SELECT pg_total_relation_size('your_table_name');
  1. pg_size_pretty():将大小值转换为可读格式,可以与上述函数结合使用。
SELECT pg_size_pretty(pg_relation_size('your_table_name'));

示例查询

以下是一个综合示例,演示如何使用这些函数来获取表的详细存储信息。

SELECT pg_size_pretty(pg_relation_size('your_table_name')) AS base_size,pg_size_pretty(pg_table_size('your_table_name')) AS table_size,pg_size_pretty(pg_indexes_size('your_table_name')) AS indexes_size,pg_size_pretty(pg_total_relation_size('your_table_name')) AS total_size;

示例结果

 base_size | table_size | indexes_size | total_size
-----------+------------+--------------+------------8192 bytes | 8192 bytes | 16384 bytes  | 24576 bytes

使用系统视图查看大小

可以使用系统视图 pg_classpg_namespace 以及函数 pg_size_pretty 结合来获取数据库中所有表的大小信息。

SELECT ns.nspname AS schema_name,cls.relname AS table_name,pg_size_pretty(pg_relation_size(cls.oid)) AS base_size,pg_size_pretty(pg_total_relation_size(cls.oid)) AS total_size
FROM pg_class cls
JOIN pg_namespace ns ON cls.relnamespace = ns.oid
WHERE cls.relkind = 'r'  -- 仅选择普通表AND ns.nspname NOT IN ('pg_catalog', 'information_schema')  -- 排除系统模式
ORDER BY pg_total_relation_size(cls.oid) DESC;

示例结果

 schema_name | table_name | base_size | total_size
-------------+------------+-----------+------------public      | large_table| 1024 MB   | 2048 MBpublic      | small_table| 128 MB    | 256 MB

通过视图查看特定数据库中所有表的大小

上述查询展示了如何在特定数据库中查看所有表的大小。如果你想仅导出一个特定模式下的表数据或包含更多详细信息,可以调整查询。

SELECT ns.nspname AS schema_name,cls.relname AS table_name,pg_size_pretty(pg_relation_size(cls.oid)) AS base_size,pg_size_pretty(pg_total_relation_size(cls.oid)) AS total_size,pg_size_pretty(pg_indexes_size(cls.oid)) AS indexes_size,pg_size_pretty(pg_table_size(cls.oid)) AS table_size
FROM pg_class cls
JOIN pg_namespace ns ON cls.relnamespace = ns.oid
WHERE cls.relkind = 'r'  -- 仅选择普通表AND ns.nspname = 'public'  -- 替换为你要查询的模式
ORDER BY pg_total_relation_size(cls.oid) DESC;

自动化查询所有数据库中的表大小

您也可以写一个脚本来循环遍历所有数据库并查询每个数据库的表大小。例如,可以使用以下 Python 脚本:

import psycopg2
import sysdef get_table_sizes(dbname, user, password, host):try:conn = psycopg2.connect(dbname=dbname, user=user, password=password, host=host)cur = conn.cursor()query = """SELECT ns.nspname AS schema_name,cls.relname AS table_name,pg_size_pretty(pg_relation_size(cls.oid)) AS base_size,pg_size_pretty(pg_total_relation_size(cls.oid)) AS total_size,pg_size_pretty(pg_indexes_size(cls.oid)) AS indexes_size,pg_size_pretty(pg_table_size(cls.oid)) AS table_sizeFROM pg_class clsJOIN pg_namespace ns ON cls.relnamespace = ns.oidWHERE cls.relkind = 'r'  -- 仅选择普通表AND ns.nspname NOT IN ('pg_catalog', 'information_schema')  -- 排除系统模式ORDER BYpg_total_relation_size(cls.oid) DESC;"""cur.execute(query)rows = cur.fetchall()for row in rows:print(row)cur.close()conn.close()except Exception as e:print(f"Error connecting to database {dbname}: {e}", file=sys.stderr)# 替换为实际的数据库名称、用户名、密码和主机
databases = ["db1", "db2"]
user = "your_user"
password = "your_password"
host = "your_host"for db in databases:print(f"Database: {db}")get_table_sizes(db, user, password, host)print("\n")

通过这种方式,可以轻松自动化地获取多个数据库中所有表的大小信息。

总结

使用 PostgreSQL 提供的函数和系统视图,可以有效地获取数据库中表的各种尺寸信息。这对于数据库管理、性能优化和容量规划非常有用。如果有更复杂的需求或遇到任何问题,随时提问!

相关文章:

  • 性能工具之 JMeter 常用组件介绍(八)
  • Python3发送邮件如何添加附件?怎么配置?
  • Python抓取天气信息
  • SQL AND OR 运算符的使用与区别
  • 全域外卖系统源码部署怎么做,外卖市场新机遇!
  • 护眼灯哪些牌子好?一文刨析护眼灯怎么选择!
  • 通用大模型VS垂直大模型,你更青睐哪一方?
  • 神经网络模型---ResNet
  • 一个基于MySQL的数据库课程设计的基本框架
  • 通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.
  • Java基础学习-方法
  • ByteTrack跟踪理解
  • 存储、管理和展示多媒体文件
  • MySQL 连接的使用方法与技巧
  • linux 部署瑞数6实战(维普,药监局)第一部分
  • (三)从jvm层面了解线程的启动和停止
  • C++类中的特殊成员函数
  • canvas绘制圆角头像
  • CSS相对定位
  • JavaScript类型识别
  • Python学习之路13-记分
  • Redux 中间件分析
  • tab.js分享及浏览器兼容性问题汇总
  • 离散点最小(凸)包围边界查找
  • 理解在java “”i=i++;”所发生的事情
  • 如何解决微信端直接跳WAP端
  • 深入浅出webpack学习(1)--核心概念
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #知识分享#笔记#学习方法
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (八)Flask之app.route装饰器函数的参数
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (南京观海微电子)——示波器使用介绍
  • (十八)三元表达式和列表解析
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转) Android中ViewStub组件使用
  • (转)大型网站的系统架构
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)甲方乙方——赵民谈找工作
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .bat批处理出现中文乱码的情况
  • .net core Redis 使用有序集合实现延迟队列
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET6实现破解Modbus poll点表配置文件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net专家(高海东的专栏)
  • /proc/vmstat 详解
  • @RestController注解的使用
  • [ Socket学习 ] 第一章:网络基础知识