首页 > 数据库 >PostgreSQL查看表的大小

PostgreSQL查看表的大小

时间:2024-06-18 12:28:39浏览次数:33  
标签:PostgreSQL name 查看 pg pretty 大小 table cls size

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 MB
 public      | 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 sys

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

标签:PostgreSQL,name,查看,pg,pretty,大小,table,cls,size
From: https://blog.csdn.net/lee_vincent1/article/details/139769598

相关文章

  • 微信vx撤回消息查看调取恢复已撤回消息数据查找,撤回消息找回
    usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text.Json;usingSystem.Threading;namespaceWeChatMessageRecovery{classProgram{staticvoidMain(string[]args){Console.WriteLine(&qu......
  • 金额工具类:大小写金额转换
    问题背景要求实现一个金额转换的工具类,输入一个数字金额,返回它的大写金额。例如:输入:105输出:壹佰零伍输入:6543输出:陆仟伍佰肆拾叁代码实现/***@description数字金额转大写的金额的公共方法*@authorJoyceLee*@date2024-06-17*@paramnum105*@re......
  • 【linux】使用 `du` 命令查看各个目录的大小,并按大小排序
    使用du命令查看各个目录的大小,并按大小排序,可以按照以下步骤操作:1.打开终端按Command+Space调出Spotlight搜索,然后输入Terminal并打开它。2.使用du命令查看目录大小使用以下命令查看当前目录下一级子目录的大小,并以人类可读的形式显示(即使用-h选项):du-......
  • exercism查看他人答案
    exercism.org正常情况下要求提交答案并测试通过才能看到其他人的答案,如果想直接参考他人答案可以在url后面添加/solutions即可。问题页面:https://exercism.org/tracks/rust/exercises/poker答案页面:https://exercism.org/tracks/rust/exercises/poker/solutions也可以参考这个......
  • MySQL和PostgreSQL
    首先,两个数据区连接驱动不一样,选用相应的依赖即可语法区别:1.TIMESTAMPTZ类型与LocalDateTime不匹配,异常信息如下:PSQLException:CannotconvertthecolumnoftypeTIMESTAMPTZtorequestedtypejava.time.LocalDateTime如果postgres表的字段类型是TIMESTAMPTZ ,但是java对......
  • 在Linux中,如何查看某进程所打开的所有文件?
    在Linux中,查看某个进程所打开的所有文件主要可以使用lsof命令。下面是详细的步骤:确定进程ID(PID):首先,你需要知道你想查询的进程的进程ID。这可以通过多种方式完成,例如使用ps命令配合grep来查找进程名称并提取PID。例如,如果你想查找名为myprocess的进程打开的文件,可以这样做:......
  • mysql中社区版如何查看进程中sql
    在MySQL中,你可以使用SHOWPROCESSLIST命令来查看当前正在运行的进程以及它们正在执行的SQL语句(如果有的话)。不过,默认情况下,SHOWPROCESSLIST可能不会显示完整的SQL语句,特别是当SQL语句非常长时。以下是如何在MySQL中查看进程及其SQL语句的方法:登录到MySQL:使用命令行客户端或......
  • delphi Image32 SVG图形查看器
    DELPHI 中没有SVG显示组件,需要用到第三方组件,高版本可以使用skia(但必须带上skia.dll).最新版Image32修改了很多,SVGIconImageList 也因此换成了Image32做为基础库,安装了 SVGIconImageList 就可以不用再单独安装Image32了(基本上是绿色不用安装包,直接引用就行)。unituFrmSVGSh......
  • 如何查看个人大数据信用报告?查询报告哪家好呢?
    大数据信用报告是现代社会中非常重要的信用评估工具,对于个人来说也具有非常重要的意义。那么,如何查看个人大数据信用报告?查询报告哪家好呢?本文将为您介绍。首先,查看个人大数据信用报告需要了解报告的内容和格式一般来说,个人大数据信用报告主要包括个人的基本......
  • MDK5.14仿真STM32F407时无法查看外设寄存器的问题
    这几天用keilmdk5.14新建工程进行仿真时,进入Debug环境发现SystemViewer菜单显示空白,Peripherals菜单没有外设寄存器。如图1和图2所示。网上查了一下资料发现大多都是解释的STM32F103系列在MDK内的修改方式,但是我用的是STM32F407ZET6,就依葫芦画瓢,照着出一个修改的说明。  ......