2009-09-02 3 views
31

Ich werde große Datenmengen (Logs) in fragmentierten PostgreSQL-Tabellen speichern (Tabelle pro Tag). Ich möchte einige von ihnen komprimieren, um Speicherplatz auf meinen Discs zu sparen, aber ich möchte nicht die Möglichkeit verlieren, sie auf die übliche Weise abzufragen.Unterstützt PostgreSQL das transparente Komprimieren von Tabellen (Fragmenten)?

Unterstützt PostgreSQL eine solche transparente Komprimierung und wo kann ich mehr darüber lesen? Ich denke, es sollte einen bekannten magischen Namen für ein solches Feature geben.

Antwort

37

Ja, PostgreSQL wird dies automatisch für Sie tun, wenn sie eine bestimmte Größe überschreiten. Die Komprimierung wird jedoch bei jedem einzelnen Datenwert angewendet - nicht auf der gesamten Tabellenebene. Das heißt, wenn Sie eine Milliarde Zeilen haben, die sehr schmal sind, werden sie nicht komprimiert. Oder wenn Sie sehr viele Spalten mit jeweils nur einem kleinen Wert haben, werden sie nicht komprimiert. Details zu diesem Schema in der manual.

Wenn Sie es auf der gesamten Tabellenebene benötigen, besteht eine Lösung darin, einen TABLESPACE für die Tabellen zu erstellen, die komprimiert werden sollen, und auf ein komprimiertes Dateisystem zu verweisen. Solange das Dateisystem noch der fsync() - und der Standard-POSIX-Semantik gehorcht, sollte dies absolut sicher sein. Details dazu in der manual.

8

Wahrscheinlich nicht, was Sie im Sinn haben, aber immer noch nützliche Informationen - Chapter 53. Database Physical Storage der feinen Anleitung. Der Abschnitt verdient weitere Aufmerksamkeit.

1

Auch nicht speziell, was Sie gefragt haben, aber möglicherweise eine Hilfe mit großen Datensätzen ist, dass PostgreSQL Tabellenvererbung unterstützt, so dass Sie Ihre Daten z. B. nach Datumsbereichen partitionieren können. Oder irgendeine andere Logik.