forcing compression of text field
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?
--
Jonathan Ellis
http://spyced.blogspot.com
On Mon, 2006-12-11 at 09:18 -0700, Jonathan Ellis wrote:
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?
Are you sure PostgreSQL isn't compressing it? I didn't think there was a
minimum threshold for compression.
Regards,
Jeff Davis
On Mon, 2006-12-11 at 10:18, Jonathan Ellis wrote:
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?
http://www.postgresql.org/docs/8.1/interactive/storage-toast.html
Has all your answers.
Scott Marlowe <smarlowe@g2switchworks.com> writes:
On Mon, 2006-12-11 at 10:18, Jonathan Ellis wrote:
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?
http://www.postgresql.org/docs/8.1/interactive/storage-toast.html
Has all your answers.
The bottom line is that PG doesn't bother trying to compress values
less than about 2KB long. While you could make a custom build with a
different threshold, the fact remains that LZ-style compression is not
real efficient on short stretches of text. If you "really need to save
disk space" it behooves you to consider that. I'd suggest thinking about
whether you can merge multiple log entries, or something, such that the
field values you need to store are on the order of a few KB.
regards, tom lane
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 12/11/06 10:18, Jonathan Ellis wrote:
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?
What can be compressed? Trailing whitespace or repeating substrings?
- --
Ron Johnson, Jr.
Jefferson LA USA
Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFFfsnvS9HxQb37XmcRAuaeAKDRv9IUDH4zenHoVQPST0vFbpHLkwCdED9k
rvvOkNCRx/J8EkGtBF2Bs9Y=
=XANI
-----END PGP SIGNATURE-----
Tom Lane wrote:
Scott Marlowe <smarlowe@g2switchworks.com> writes:
On Mon, 2006-12-11 at 10:18, Jonathan Ellis wrote:
I have a table of log messages. They are mostly in the 100-200
character length, which apparently isn't large enough for PG to want
to compress it (length == octet_length). I really need to save disk
space. I can store it as a bytea and compress it manually (zlib level
1 compression gives about 50% savings), but is there a way to force
pg's own compression before I resort to this?http://www.postgresql.org/docs/8.1/interactive/storage-toast.html
Has all your answers.The bottom line is that PG doesn't bother trying to compress values
less than about 2KB long. While you could make a custom build with a
different threshold, the fact remains that LZ-style compression is not
real efficient on short stretches of text. If you "really need to save
disk space" it behooves you to consider that. I'd suggest thinking about
whether you can merge multiple log entries, or something, such that the
field values you need to store are on the order of a few KB.
See ALTER TABLE ALTER [ COLUMN ] column SET STORAGE { PLAIN | EXTERNAL |
EXTENDED | MAIN }.
--
Bruce Momjian bruce@momjian.us
EnterpriseDB http://www.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +