2010-09-27 14 views
24

wiem w SQL możemy skompresować pole tekstowe tak:kompresji tekstu w PostgreSQL

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

Chcę wiedzieć, jak osiągnąć kompresję tekstu w PostgreSQL.

+0

Aby zapisać skompresowany ciąg, zobacz także http://stackoverflow.com/q/2958073/287948 –

Odpowiedz

26

Kompresja jest domyślnie włączona we wszystkich typach ciągów, nie trzeba jej informować o tym w bazie danych. Sprawdź w instrukcji o TOAST

  • PLAIN zapobiega zarówno kompresję lub out-of-line magazynowej; ponadto wyłącza używanie jednobajtowych nagłówków dla typów varlena. Jest to jedyna możliwa strategia dla kolumn o typach danych innych niż TOAST.
  • EXTENDED umożliwia zarówno kompresję, jak i przechowywanie poza linią . Jest to domyślne ustawienie dla większości typów danych zgodnych z TOAST: . Najpierw zostanie wykonana kompresja , a następnie przechowywanie poza linią, jeśli wiersz jest zbyt duży.
  • EXTERNAL umożliwia przechowywanie poza linią , ale bez kompresji. Zastosowanie zewnętrznych uczyni operacje podciągu na szerokich tekstowych i bytea kolumnach szybciej (pod karą zwiększonego magazynowania przestrzeni), ponieważ operacje te są zoptymalizowany do pobrania tylko wymagane części wartości out-of-line kiedy nie jest skompresowany.
  • GŁÓWNA pozwala na kompresję, ale nie na przechowywanie poza linią . (Faktycznie, out-of-line przechowywanie nadal będzie wykonywane dla tych kolumn, ale tylko w ostateczności, gdy nie ma inny sposób, aby rząd małych wystarczy, aby zmieścić się na stronie.)
+5

Z dokumentów wygląda na to, że kompresja TOAST jest aktywna tylko dla wartości większych niż 2kb. Przykład OP nie przekroczyłby progu 2k, a zatem nie zostanie skompresowany. –

+0

Możesz wymusić kompresję, zależy od parametrów przechowywania: http://www.postgresql.org/docs/current/interactive/storage-toast.html –

+1

Zmieniając TOAST_TUPLE_THRESHOLD? Myślę, że to wymaga ponownej kompilacji? –