如何根据表大小和可用空间删除旧行?

时间:2012-05-22 19:46:17

标签: postgresql

我在表中连续插入,并希望自动删除最旧的行以保持表的大小不变(表示硬盘驱动器上表的大小)。我能够在mysql中使用:

执行此操作
SELECT DATA_LENGTH,DATA_FREE FROM information_schema.tables WHERE table_name = 'table';

使用这些值和驱动器上的可用空间,我可以发出删除语句,表格大小不会增长。

我怎样才能在postgresql中执行此操作?我只能找到表格大小:

SELECT pg_total_relation_size('table_name');

有没有办法找到表格中的可用空间,还是有更好的解决办法让桌子保持固定的大小?

1 个答案:

答案 0 :(得分:2)

这可能是表格大小的开始

SELECT relname, relpages * 8192 "Size_In_Bytes" 
FROM pg_class c
JOIN information_schema.tables t 
    ON c.relname = t.table_name 
WHERE table_schema = 'public' 
ORDER BY  relpages * 8192 DESC

我对将DB保持在一定大小的要求感到有些好奇。你在其他地方存档数据吗?如果没有,为什么要保留它?为什么不将其作为基于时间的保留策略而不是基于大小的保留策略?