我在 Postgres 的 TEXT 字段中存储了一些大型 XML 文档,我试图找出 TOAST 压缩它们的效率。我有一个 2.2mb 的 XML 文档,可以压缩到 51kb,所以我想了解 TOAST 的压缩率与它的匹配程度,以便对我将如何随着时间的推移归档这些文档做出最终决定。

Postgres 中是否有一个函数可以让我像这样识别特定列和行的 TOAST 压缩大小?

最佳答案

您需要 pg_column_size 为 TOASTed 大小,octet_length 为未烘烤大小。 pg_column_sizesystem 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)

10-05 22:15