2009-09-02 5 views
31

Mam zamiar przechowywać duże ilości danych (logi) w pofragmentowanych tabelach PostgreSQL (tabela dziennie). Chciałbym skompresować niektóre z nich, aby zaoszczędzić trochę miejsca na dyskach, ale nie chcę stracić możliwości odpytywania ich w zwykły sposób.Czy obsługa PostgreSQL umożliwia przezroczyste kompresowanie tabel (fragmentów)?

Czy PostgreSQL obsługuje tak przejrzystą kompresję i gdzie mogę ją przeczytać bardziej szczegółowo? Myślę, że powinna istnieć jakaś znana magiczna nazwa takiej funkcji.

Odpowiedz

37

Tak, PostgreSQL zrobi to automatycznie, gdy przekroczą określony rozmiar. Kompresja jest stosowana dla każdej indywidualnej wartości danych - nie na poziomie pełnej tabeli. Oznacza to, że jeśli masz miliard wierszy, które są bardzo wąskie, nie zostaną skompresowane. Lub jeśli masz bardzo dużo kolumn, z których każda zawiera tylko małą wartość, nie zostaną skompresowane. Szczegółowe informacje na temat tego schematu w manual.

Jeśli potrzebujesz go na pełnym poziomie tabeli, rozwiązaniem jest utworzenie TABLESPACE dla tych tabel, które chcesz skompresować, i skierowanie go do skompresowanego systemu plików. Dopóki system plików będzie nadal słuchał fsync() i standardowej semantyki POSIX, powinno to być całkowicie bezpieczne. Szczegóły na ten temat w manual.

1

Nie jest również konkretnym pytaniem, ale może być pomocne w przypadku dużych zbiorów danych, ponieważ PostgreSQL obsługuje dziedziczenie tabel, co umożliwia podział danych na partycje, na przykład według zakresów dat. Lub inna logika.

Powiązane problemy