You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何统计表中每一列的总大小?

获取PostgreSQL表中各列的总存储大小

你之前的语句select sum(pg_column_size(bks.*)) from books bks;是把整行数据的大小累加,所以只会返回一个整体总和,而非每列单独的统计结果。要实现按列统计总大小,有两种实用方法:

方法一:手动指定列(适合列数少的表)

直接对每个列单独调用pg_column_size()并求和,给结果列设置对应别名:

SELECT
  SUM(pg_column_size(id)) AS id_size,
  SUM(pg_column_size(book_title)) AS book_title_size,
  SUM(pg_column_size(author)) AS author_size, -- 替换为你表中实际的列名
  SUM(pg_column_size(publish_date)) AS publish_date_size
FROM books;

这种方式简单直接,结果清晰,但如果表结构新增或删除列,需要手动修改SQL语句。

方法二:动态生成SQL(适合列数多或结构易变的表)

利用系统表information_schema.columns自动获取表的所有列名,拼接成统计SQL,避免手动编写每一列:

-- 生成统计用的SQL语句
SELECT 'SELECT ' || string_agg(
  'SUM(pg_column_size(' || quote_ident(column_name) || ')) AS ' || quote_ident(column_name || '_size'),
  ', '
) || ' FROM books;' AS query
FROM information_schema.columns
WHERE table_name = 'books' 
  AND table_schema = 'public'; -- 替换为你的表所在schema,默认是public

执行这条语句后,会输出一条完整的统计SQL,复制该SQL再次执行即可得到所有列的总大小。

如果需要直接执行,也可以用PL/pgSQL块:

DO $$
DECLARE
  sql_query TEXT;
BEGIN
  SELECT string_agg(
    'SUM(pg_column_size(' || quote_ident(column_name) || ')) AS ' || quote_ident(column_name || '_size'),
    ', '
  ) INTO sql_query
  FROM information_schema.columns
  WHERE table_name = 'books' AND table_schema = 'public';
  
  EXECUTE sql_query;
END $$;

注意点

  • pg_column_size()返回单个值的实际存储字节数(包括变长类型的长度前缀等开销),求和后即为该列所有行的总存储大小。
  • 若列中有NULL值,pg_column_size(NULL)返回0,不会影响总和统计。

内容的提问来源于stack exchange,提问作者Qwerty Qazaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:52:53