我将在碎片化的PostgreSQL表(每天的表)中存储大量数据(日志)。我想压缩其中一些以节省光盘上的空间,但我不想失去以通常的方式查询它们的能力。
PostgreSQL是否支持这种透明压缩,哪里可以更详细地阅读它?我认为这个功能应该有一些众所周知的魔术名称。
答案 0 :(得分:42)
是的,PostgreSQL会在超过一定大小时自动为您执行此操作。压缩应用于每个单独的数据值 - 而不是在整个表级别。这意味着如果你有十亿行非常狭窄,它们就不会被压缩。或者如果你有很多列,每个列只有一个很小的值,它们就不会被压缩。有关此方案的详细信息,请参见manual。
如果您需要在整个表级别上,解决方案是为要压缩的表创建一个TABLESPACE,并将其指向压缩文件系统。只要文件系统仍然遵循fsync()和标准POSIX语义,这应该是非常安全的。有关详细信息,请参见manual。
答案 1 :(得分:8)
可能不是你的想法,但仍然有用的信息 - Chapter 53. Database Physical Storage的精细手册。 TOAST部分值得进一步关注。
答案 2 :(得分:2)
同样没有具体要求您提供但可能对大型数据集有所帮助的是PostgreSQL支持表继承,允许您对数据进行分区,例如,按日期范围。或者其他一些逻辑。