首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSql 14 lz4压缩不工作?

PostgreSql 14 lz4压缩不工作?
EN

Stack Overflow用户
提问于 2022-03-04 11:08:49
回答 1查看 669关注 0票数 2

我安装了一个PostgrSql 14,我想压缩一些数据以节省一些磁盘空间。数据是音频文件(1kb - 5mb),转换为base64字符串。我创建了3个表:

代码语言:javascript
复制
CREATE TABLE t_uncompressed (
    file_name VARCHAR(50) NOT NULL PRIMARY KEY,
    file_size BIGINT,
    raw_data       TEXT
);


CREATE TABLE t_lz4 (
    file_name VARCHAR(50) NOT NULL PRIMARY KEY,
    file_size BIGINT,
    raw_data       TEXT COMPRESSION lz4
);


CREATE TABLE t_pglz (
    file_name VARCHAR(50) NOT NULL PRIMARY KEY,
    file_size BIGINT,
    raw_data       TEXT COMPRESSION pglz
);

然后我把我的数据插入到这些表中。我检查了数据被压缩的位置,得到了使用lz4压缩了403行,只有一行使用了pglz

代码语言:javascript
复制
SELECT count(*) total, 
count(*) FILTER ( WHERE pg_column_compression(raw_data) NOTNULL) compressed, 
'lz4' compr_type
    FROM t_lz4
UNION
SELECT count(*) total, 
count(*) FILTER ( WHERE pg_column_compression(raw_data) NOTNULL) compressed, 
'pglz' compr_type
    FROM t_pglz;

 total | compressed | compr_type 
-------+------------+------------
   738 |          1 | pglz
   738 |        403 | lz4
(2 rows)

对我来说,奇怪的是这三张桌子的大小是一样的!好的,关于未压缩表和pglz表,但是为什么_lz4表有相同大小的

我用这种方法得到桌子的尺寸:

代码语言:javascript
复制
SELECT schemaname || '.' || tablename full_tname
    , pg_size_pretty(pg_total_relation_size('"' || schemaname || '"."' || tablename || '"')) total_usage
    , pg_size_pretty(pg_relation_size('"' || schemaname || '"."' || tablename || '"')) data_size
    , pg_size_pretty((pg_total_relation_size('"' || schemaname || '"."' || tablename || '"') -
                      pg_relation_size('"' || schemaname || '"."' || tablename || '"') -
                      pg_indexes_size('"' || schemaname || '"."' || tablename || '"')))
    AS TOAST
    FROM pg_catalog.pg_tables
    WHERE tablename ~ 't_';

  full_tname         | total_usage | data_size | toast  
---------------------+-------------+-----------+--------
 t_lz4               | 338 MB      | 80 kB     | 338 MB
 t_pglz              | 338 MB      | 80 kB     | 338 MB
 t_uncompressed      | 338 MB      | 80 kB     | 338 MB
 (3 rows)

数据库中使用的默认压缩是pglz,也许这个信息很重要.

代码语言:javascript
复制
postgres=# SHOW default_toast_compression ;
 default_toast_compression 
---------------------------
 pglz
(1 row)
EN

回答 1

Stack Overflow用户

发布于 2022-03-04 20:11:40

你没说是什么样的音频文件。大多数音频文件格式已经压缩,不会进一步压缩。base64编码它们确实意味着它们应该压缩一点点,以压缩它们所导致的扩展。没有Huffman编码的LZ在压缩这种扩展方面尤其糟糕。这就是通过查看表的大小所看到的:压缩是徒劳的。

PostgreSQL使用的压缩实现检查是否无效,并放弃压缩看起来不太可压缩的东西。这就是你在pg_column_compression()上看到的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71350563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档