web-dev-qa-db-ja.com

PostgreSQLはテーブル(フラグメント)の透過的な圧縮をサポートしていますか?

大量のデータ(ログ)を断片化されたPostgreSQLテーブル(1日あたりのテーブル)に保存します。それらの一部を圧縮してディスクのスペースを節約したいのですが、通常の方法でそれらを照会する機能を失いたくありません。

PostgreSQLはこのような透過的な圧縮をサポートしていますか?それについてどこでより詳しく読むことができますか?そのような機能には、よく知られている魔法の名前があるはずだと思います。

36
Prikrutil

はい、PostgreSQLは、一定のサイズを超えると自動的にこれを実行します。ただし、圧縮は個々のデータ値ごとに適用されます-テーブル全体ではありません。つまり、非常に狭い10億行がある場合、それらは圧縮されません。または、非常に多くの列にそれぞれ小さな値しか含まれていない場合、それらは圧縮されません。 manual にあるこのスキームの詳細。

フルテーブルレベルで必要な場合、解決策は、圧縮するテーブルのTABLESPACEを作成し、それを圧縮ファイルシステムにポイントすることです。ファイルシステムがfsync()と標準のPOSIXセマンティクスに従っている限り、これは完全に安全です。これに関する詳細は manual にあります。

46
Magnus Hagander

おそらくあなたが心に描いているものではないが、それでも有用な情報- 第53章データベースの物理ストレージ ファインマニュアル。 [〜#〜] toast [〜#〜] セクションには、さらに注意が必要です。

8
Milen A. Radev