PostgreSQL如何查看数据库及表中数据占用空间大小详解

 更新时间:2025年02月14日 09:39:14   作者:fuqying  
这篇文章主要介绍了PostgreSQL中用于查看数据库和表空间大小的函数,并提供了每个函数的详细说明和应用场景,文中通过代码介绍的非常详细,需要的朋友可以参考下

1、应用场景

场景1:查看数据库占用空间大小

SELECT pg_size_pretty(pg_database_size('database_name'));

场景2:查看每张表占用空间大小

SELECT
    table_schema || '.' || table_name AS table,
    #仅表数据
    pg_size_pretty(pg_relation_size(table_schema || '.' || table_name)) AS size
    #表数据+索引数据
    #pg_size_pretty(pg_total_relation_size(table_schema || '.' || table_name)) AS size
FROM information_schema.tables
WHERE 
    table_schema = 'public'
ORDER BY
    pg_relation_size(table_schema || '.' || table_name) DESC;
    #pg_total_relation_size(table_schema || '.' || table_name) DESC;

查看特定表占用大小, 可用:

#仅表数据
SELECT pg_size_pretty(pg_relation_size('schemal_test.table_test'));
#表数据+索引数据
SELECT pg_size_pretty(pg_total_relation_size('schemal_test.table_test'));

2、PostgreSQL 空间大小知多少

表空间(Table Space)

#查找 postgresql 表空间大小
SELECT pg_size_pretty (pg_tablespace_size ('tablespace_name'));

#所有表空间的名称和大小
SELECT spcname, pg_size_pretty(pg_tablespace_size(spcname)) as size from pg_tablespace;

数据库(Database)

#查找单个 postgresql 数据库大小
SELECT pg_size_pretty(pg_database_size('db_name'));

#所有数据库的总大小,以易读的格式显示
SELECT pg_size_pretty(SUM(pg_database_size(datname))) FROM pg_database;


#查看所有数据库的列表及其大小(以 GB 为单位),降序
SELECT
	pg_database.datname as db_name,
	pg_database_size(pg_database.datname)/1024/1024/1024 as db_size
FROM pg_database ORDER by db_size DESC;

#或 pg_size_pretty用修饰大小
SELECT
	pg_database.datname as db_name,
	pg_size_pretty(pg_database_size(pg_database.datname)) as db_size
FROM pg_database ORDER by pg_database_size(pg_database.datname) DESC;

#查看所有数据库的名称、所有者以及它们各自的大小
SELECT 
    db.datname AS db_name,
    pg_catalog.pg_get_userbyid(db.datdba) AS owner,
    CASE
        WHEN pg_catalog.has_database_privilege(db.datname, 'CONNECT') THEN
            pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(db.datname))
        ELSE 'No Access'
    END AS size
FROM pg_catalog.pg_database db
ORDER BY CASE
            WHEN pg_catalog.has_database_privilege(db.datname, 'CONNECT') THEN
                pg_catalog.pg_database_size(db.datname)
        END;

模式(Schema)

#当前模式或任何模式中所有表的大小、表相关对象的大小以及总表大小
SELECT stats.relname as table_name,
	pg_size_pretty(pg_relation_size(statios.relid)) as table_size,
	pg_size_pretty(pg_total_relation_size(statios.relid) - pg_relation_size(statios.relid)) as external_size,
	pg_size_pretty(pg_total_relation_size(statios.relid)) as total_table_size,
	stats.n_live_tup as live_rows
FROM pg_catalog.pg_statio_user_tables as statios
JOIN pg_stat_user_tables as stats
USING (relname)
WHERE stats.schemaname = 'schema_name'  -- 替换成模式名称
UNION ALL
SELECT 'TOTAL' as table_name,
   pg_size_pretty(sum(pg_relation_size(statios.relid))) AS table_size,
   pg_size_pretty(sum(pg_total_relation_size(statios.relid) - pg_relation_size(statios.relid))) AS external_size,
   pg_size_pretty(sum(pg_total_relation_size(statios.relid))) AS total_table_size,
   sum(stats.n_live_tup) AS live_rows
FROM pg_catalog.pg_statio_user_tables AS statios
JOIN pg_stat_user_tables AS stats
USING (relname)
WHERE stats.schemaname = 'schema_name'  -- 替换成模式名称
ORDER BY live_rows ASC;

表(Table-Relation)

#查看postgresql 数据库的单个表大小-不包括依赖项大小:
SELECT pg_size_pretty(pg_relation_size('schema_test.table_name'));
#SELECT pg_size_pretty(pg_relation_size('table_name'));

#查看postgresql 数据库的单个表大小-包括依赖项大小:
SELECT pg_size_pretty(pg_total_relation_size('schema_test.table_name'));
#SELECT pg_size_pretty(pg_total_relation_size('table_name'));

#查找当前数据库中每张表大小,包含索引
SELECT 
    table_schema || '.' || table_name as table_name, 
    pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) as table_size 
FROM information_schema.tables 
ORDER BY 
    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC

#查找当前数据库中每张表和索引大小,包含索引
SELECT
    table_name,
    pg_size_pretty(pg_table_size(table_name)) as table_size,
    pg_size_pretty(pg_indexes_size(table_name)) as index_size, 
    pg_size_pretty(pg_total_relation_size(table_name)) as total_size
FROM (
    select ('"' || table_schema || '"."' || table_name || '"') as table_name FROM information_schema.tables) as tables
ORDER BY 4 DESC

#查看表大小以及依赖项大小
SELECT schemaname as schema_name,
	relname as table_name,
	pg_size_pretty(pg_total_relation_size(relid)) as table_size,
	pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as external_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

#查看所有表的行数
select relname as table_name, reltuples as rows from pg_class where relkind = ‘r' order by rowCounts desc

索引(Index-Relation)

#postgresql数据库的单个索引大小:
SELECT pg_size_pretty(pg_indexes_size('index_name'));

#列出数据库中每个索引的大小
SELECT indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes;

列(Column)

#PostgreSQL 列值大小, 要查找存储特定值需要多少空间,可以使用 pg_column_size() 函数,例如:
select pg_column_size(5::smallint);
select pg_column_size(5::int);
select pg_column_size(5::bigint);
#获取OID
select * from pg_class where relname='table_name';
select oid, datname from pg_database;

#查看文件地址
select pg_relation_filepath('table_name');

函数说明

函数名返回类型描述
pg_column_size(any)int存储一个指定的数值需要的字节数(可能压缩过)
pg_database_size(oid)bigint指定OID的数据库使用的磁盘空间
pg_database_size(name)bigint指定名称的数据库使用的磁盘空间
pg_indexes_size(regclass)bigint关联指定表OID或表名的表索引的使用总磁盘空间
pg_relation_size(relation regclass, fork text)bigint指定OID或名的表或索引,通过指定fork('main', 'fsm' 或'vm')所使用的磁盘空间
pg_relation_size(relation regclass)bigintpg_relation_size(..., 'main')的缩写
pg_size_pretty(bigint)text把以字节计算的数值转换成一个人类易读的单位
pg_size_pretty(numeric)text把以字节计算的数值转换成一个人类易读的单位
pg_table_size(regclass)bigint指定表OID或表名的表使用的磁盘空间,除去索引(但是包含TOAST,自由空间映射和可视映射)
pg_tablespace_size(oid)bigint指定OID的表空间使用的磁盘空间
pg_tablespace_size(name)bigint指定名称的表空间使用的磁盘空间
pg_total_relation_size(regclass)bigint指定表OID或表名使用的总磁盘空间,包括所有索引和TOAST数据

oid获取

#获取数据表的OID
select oid,relname from pg_class where relname='table_name';
#获取数据库的OID
select oid, datname from pg_database;
#获取数据表的文件路径
select pg_relation_filepath('table_name');

总结 

到此这篇关于PostgreSQL如何查看数据库及表中数据占用空间大小的文章就介绍到这了,更多相关PostgreSQL查看数据占用空间大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 常用 PostgreSQL 数据恢复方案及使用示例

    常用 PostgreSQL 数据恢复方案及使用示例

    这篇文章主要介绍了常用 PostgreSQL 数据恢复方案概览,数据丢失通常是由 DDL 与 DML 两种操作引起,由于在操作系统中表文件已经不存在,所以只能采用恢复磁盘的方法进行数据恢复,需要的朋友可以参考下
    2022-01-01
  • PostgreSQL中enable、disable和validate外键约束的实例

    PostgreSQL中enable、disable和validate外键约束的实例

    这篇文章主要介绍了PostgreSQL中enable、disable和validate外键约束的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Abp.NHibernate连接PostgreSQl数据库的方法

    Abp.NHibernate连接PostgreSQl数据库的方法

    这篇文章主要为大家详细介绍了Abp.NHibernate连接PostgreSQl数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • postgresql使用dblink跨库增删改查的步骤

    postgresql使用dblink跨库增删改查的步骤

    这篇文章主要介绍了postgresql使用dblink跨库增删改查,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • PostgreSQL数据库管理系统快速入门

    PostgreSQL数据库管理系统快速入门

    这篇文章主要介绍了PostgreSQL数据库快速入门,PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能,需要的朋友可以参考下
    2023-07-07
  • postgresql 中的加密扩展插件pgcrypto用法说明

    postgresql 中的加密扩展插件pgcrypto用法说明

    这篇文章主要介绍了postgresql 中的加密扩展插件pgcrypto用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL如何根据字符串的长度排序

    PostgreSQL如何根据字符串的长度排序

    在PostgreSQL数据库中,可以通过LENGTH函数获取字符串的长度,并据此进行排序,LENGTH函数会计算并返回字符串的字符数量,要根据字符串长度进行升序排序,可以在SQL查询中直接使用LENGTH函数,本文介绍PostgreSQL如何根据字符串的长度排序,感兴趣的朋友一起看看吧
    2024-11-11
  • postgresql 数据库 与TimescaleDB 时序库 join 在一起

    postgresql 数据库 与TimescaleDB 时序库 join 在一起

    这篇文章主要介绍了postgresql 数据库 与TimescaleDB 时序库 join 在一起,需要的朋友可以参考下
    2020-12-12
  • 在PostgreSQL中使用ltree处理层次结构数据的方法

    在PostgreSQL中使用ltree处理层次结构数据的方法

    这篇文章主要介绍了在PostgreSQL中使用ltree处理层次结构数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • PostgreSQL教程(四):数据类型详解

    PostgreSQL教程(四):数据类型详解

    这篇文章主要介绍了PostgreSQL教程(四):数据类型详解,本文讲解了数值类型、字符类型、布尔类型、位串类型、数组、复合类型等数据类型,需要的朋友可以参考下
    2015-05-05

最新评论