2010-09-27 11 views
24

ich in SQL wissen wir das Textfeld wie folgt komprimieren:Text Kompression in PostgreSQL

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION); 

Ich möchte wissen, wie die Textkompression in Postgres zu erreichen.

+0

Zum Speichern der komprimierten Zeichenfolge, siehe auch http://StackOverflow.com/q/2958073/287948 –

Antwort

26

Die Komprimierung ist standardmäßig für alle Zeichenfolientypen aktiviert. Sie müssen die Datenbank nicht dazu auffordern. Das Handbuch über TOAST

  • PLAIN entweder Kompression oder out-of-Line-Speicher verhindert; weiterhin deaktiviert die Verwendung von Single-Byte-Header für Varlena-Typen. Dies ist die einzige mögliche Strategie für Spalten nicht-TOAST-fähiger Datentypen.
  • EXTENDED ermöglicht sowohl Komprimierung als auch Out-of-Line-Speicher. Dies ist der Standard für die meisten TOAST-fähigen Daten Typen. Komprimierung wird versucht zuerst, dann Out-of-Line-Speicher, wenn die Zeile immer noch zu groß ist.
  • EXTERNAL ermöglicht Out-of-Line-Speicher , aber keine Komprimierung. Verwendung von externen werden Teilzeichenoperationen auf breiten Text und bytea Spalten machen schneller (bei der Strafe der erhöhten Lager Raum), da diese Operationen nur die erforderlichen Teile des Out-of-line-Wert holen optimiert, wenn Es ist nicht komprimiert.
  • MAIN ermöglicht Komprimierung, aber nicht Out-of-Line-Speicher. (Eigentlich out-of-line wird Lagerung noch für solche Spalten durchgeführt werden, sondern nur als letztes Mittel, wenn es keine andere Art und Weise der Reihe kleinen genug, um auf einer Seite passen.)
+5

Aus den Dokumenten scheint es, dass die TOAST-Komprimierung nur für Werte größer als 2 KB aktiv ist. Das Beispiel des OP würde den 2k-Schwellenwert nicht erreichen und wird daher nicht komprimiert. –

+0

Sie können die Komprimierung erzwingen, abhängig von den Speicherparametern: http://www.postgresql.org/docs/current/interactive/storage-toast.html –

+1

Durch Ändern von TOAST_TUPLE_THRESHOLD? Ich denke, das erfordert eine Neukompilierung? –