我在压缩的 ZFS 文件系统上运行 PostgreSQL 。提到的一个技巧是禁用 PostgreSQL 的内联 TOAST 压缩,因为 ZFS 可以更好地压缩数据。这可以通过将列存储设置为 来完成EXTERNAL
。
我可以通过以下方式逐列执行此操作:
ALTER TABLE my_table ALTER COLUMN my_column SET STORAGE EXTERNAL;
但是,这可能有点麻烦,因为每个模式都需要手动迁移到这里。
有没有简单的方法
- 将所有列的默认设置
STORAGE
为EXTERNAL
而不是MAIN
- 以其他方式禁用 TOAST 压缩
我找到了default_toast_compression 选项,但文档不清楚我是否可以禁用它。
default_toast_compression
仅确定烘烤列值时要使用的压缩方法。它根本不决定值是否被烘烤。值得注意的是,TOAST 机制适用于内联和外联存储的值。就是“超大属性储存术”。
您想完全禁用压缩,而不仅仅是选择首选算法。在去那里之前:真的值得可能的并发症吗?让我从您的参考页面引用完整的报价:
大胆强调我的。考虑使用(Postgres 14 中的新功能)LZ4 压缩方法并完成它。看:
你问什么
您可以设置
STORAGE
每个数据类型。类型示例varchar
:然后将其复制到更改后创建的具有该类型的每个表列。手册:
您必须另外更改现有列。
只能通过这种方式更改基本
pg_type.typtype
类型(参见手册)。它可能会引入警告。手册ALTER TYPE
:也就是说,作为超级用户,您可以使用以下查询更改系统中的所有基本类型:
我自己从未尝试过,也不会去那里,除非您确切知道自己在做什么,否则强烈建议不要这样做。乱用系统目录可能会破坏您的数据库集群。
我会去的
default_toast_compression = 'lz4'
。也许首先尝试一个或两个选定的数据类型ALTER TYPE ... SET (STORAGE = external);
......