我在 Postgres 的 TEXT 字段中存储了一些大型 XML 文档,我试图找出 TOAST 压缩它们的效率。我有一个 2.2mb 的 XML 文档,可以压缩到 51kb,所以我想了解 TOAST 的压缩率与它的匹配程度,以便对我将如何随着时间的推移归档这些文档做出最终决定。
Postgres 中是否有一个函数可以让我像这样识别特定列和行的 TOAST 压缩大小?
最佳答案
您需要 pg_column_size
为 TOASTed 大小,octet_length
为未烘烤大小。 pg_column_size
在 system administration functions section of the documentation 中。有关更多详细信息,请参阅文档和 this question。
例子:
craig=> CREATE TABLE toastdemo(x text);
CREATE TABLE
craig=> insert into toastdemo(x) select * from repeat('abcdef',1000);
INSERT 0 1
craig=> select pg_column_size(x), pg_column_size(repeat('abcdef',1000)) FROM toastdemo;
pg_column_size | pg_column_size
----------------+----------------
84 | 6004
(1 row)