CYBERTEC PostgreSQL Logo

LZ4 and ZSTD pg_dump compression in PostgreSQL 16

04.2023 / Category: / Tags: |

LZ4 and ZSTD pg_dump compression

I wrote a "pg_dump compression specifications in PostgreSQL 16" post a while ago. Frankly speaking, I thought new compression methods would not be implemented in PostgreSQL until 2-3 years from now. Probably demand is so high that LZ4 and ZSTD made their way into PostgreSQL 16!

The LZ4 patch author is Georgios Kokolatos. Committed by Tomas Vondra. Reviewed by Michael Paquier, Rachel Heaton, Justin Pryzby, Shi Yu, and Tomas Vondra. The commit message is:

The ZSTD patch author is Justin Pryzby. Committed by Tomas Vondra. Reviewed by Tomas Vondra, Jacob Champion, and Andreas Karlsson. The commit message is:

Let's try it out!

Based on the output of the commands, we can conclude the following about the three compression methods:

  • gzip: This is a well-known and widely used compression algorithm that is known to provide a good balance between compression ratio and compression speed.
  • lz4: This is a very fast compression algorithm that provides a high compression and decompression speed at the cost of a lower compression ratio. The file sizes for the lz4-compressed dumps are in the range of 48-50 MB, which is significantly larger than the gzip-compressed dumps.
  • zstd: This is a relatively new compression algorithm that provides a high compression ratio and a good compression and decompression speed. The file sizes for the zstd-compressed dumps are in the range of 8-8.5MB, which is the smallest among the three compression methods.

The big surprise to me is that zstd takes the least amount of time for compression, followed by lz4 and gzip. This data probably is not the best to produce measurements and comparisons. However, that's a topic for another blog post. At the default compression level, zstd produces the smallest dump file size, followed by lz4 and gzip. At the maximum compression level, zstd still produces the smallest dump file size, followed by gzip and lz4.

Based on these observations, if your priority is to reduce disk space usage, zstd is the recommended compression method. However, if your priority is to minimize compression time, zstd and lz4 both perform well. If compatibility with other utilities is a concern, gzip remains a viable option.

Finally...

pg_dump's -Z/--compress in PostgreSQL 16 will support more than just an integer. It can be used to specify the method and level of compression used. The default is still gzip with a level of 6. But the new kids on the block, lz4 and zstd, are already here!

That said, pg_dump is sometimes used to update and/or upgrade the database. In case you want to understand the difference between an update and an upgrade, check out this blog post by Hans-Jürgen Schönig. Or check out our other related publications about updating and upgrading.


In order to receive regular updates on important changes in PostgreSQL, subscribe to our newsletter, or follow us on Twitter, Facebook, or LinkedIn.

One response to “LZ4 and ZSTD pg_dump compression in PostgreSQL 16”

  1. Hello, because zstd allows better performance doing a restore perhaps including writing a file with -f, using -j [parallel restore] will show the real capability and speed to restore a database using zstd.

Leave a Reply

Your email address will not be published. Required fields are marked *

CYBERTEC Logo white
CYBERTEC PostgreSQL International GmbH
Römerstraße 19
2752 Wöllersdorf
Austria

+43 (0) 2622 93022-0
office@cybertec.at

Get the newest PostgreSQL Info & Tools


    This site is protected by reCAPTCHA and the Google Privacy Policy & Terms of Service apply.

    ©
    2024
    CYBERTEC PostgreSQL International GmbH
    phone-handsetmagnifiercrosscross-circle
    linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram