如何在PostgreSQL中获取特定表的每行大小?

28

在PostgreSQL中,是否有可能获取特定表的每行大小?

例如,一个表有50行,总表大小为10GB,但我想知道每行的大小而不是完整表的大小。

3个回答

48

计算Postgres表行大小的函数大致如下:

SELECT sum(pg_column_size(t.*)) as filesize, count(*) as filerow FROM TABLE_NAME as t;

TABLE_NAME 替换为您的表名; 要添加条件,请使用 t.COLUMN_NAME = 'YOUR_VALUE'


2
不错。请注意,pg_column_size(t.*) 可以简化为 pg_column_size(t)。该值将包括行头的“开销”,因此要获取实际数据大小,您需要减去 24:pg_column_size(t) - 24 - user330315
3
如果能够帮助到某些人快速查找,这里返回的值是以字节为单位的大小。 - rocksteady

10

没有计算行大小的函数,只有计算列值大小的函数。因此您可以执行以下操作:

select pg_column_size(column_1) + 
       pg_column_size(column_2) + 
       pg_column_size(column_3) as row_size
from the_table;

如果您需要,可以使用动态SQL和PL/pgSQL函数来自动化此过程。

谢谢,但是我如何在表中的所有行上运行此查询呢?你能帮我提供动态查询吗? - Deepesh Goel
@DeepeshGoel:这将运行表中的所有行,因为它没有where子句。 - user330315
@a_horse_with_no_name,您能否分享一下输出的单位是什么?是字节吗? - aquaman
1
@aquaman 【手册引用】(https://www.postgresql.org/docs/current/functions-admin.html#id-1.5.8.33.9.3.2.2.1.1.1.1) "显示存储任何单个数据值所使用的字节数" - user330315

0
如果你想计算特定行的大小,或者使用where子句只返回一行,请尝试以下方法 -
select pg_column_size(table_name.*) as rowsize_in_bytes from table_name where id = '698119855102848';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接