从 pglz更改default_toast_compression
为 lz4 后,我想将现有数据更新为新的、更快的压缩。
唯一的方法似乎是转储整个表并从头开始重新创建它,这对于非常大和/或正在使用的数据库来说并不理想。
我发现这个邮件列表线程表明UPDATE tab SET id = id
可以做到这一点,但测试表明什么也没有发生。
postgres=# SHOW default_toast_compression;
default_toast_compression
---------------------------
lz4
(1 row)
postgres=# SELECT pg_column_compression(data) FROM pg_largeobject WHERE loid=49946 AND pageno=0;
pg_column_compression
-----------------------
pglz
(1 row)
postgres=# UPDATE pg_largeobject SET data=data WHERE loid=49946 AND pageno=0;
UPDATE 1
postgres=# SELECT pg_column_compression(data) FROM pg_largeobject WHERE loid=49946 AND pageno=0;
pg_column_compression
-----------------------
pglz
(1 row)
您需要强制执行解压缩/重新压缩循环,否则它会优化此操作并仅复制“指针”。