postgres文本存储内联或"背景表"?

Mik*_*iss 5 postgresql rdbms

在PostgreSQL中,如何判断text列是内联存储还是存储在"后台表"中?

文本列类型的文档说明了这一点

非常长的值也存储在后台表中,因此它们不会干扰对较短列值的快速访问.

是否存在固定长度,其中一个值被确定为"非常长"?如果没有,是否有其他方法可以告诉我的列如何在磁盘上布局?我有一个包含多个列text(或varchar(n))的表,并希望了解它们是如何存储在引擎盖下的.某处有关于这些"背景表"的更多文档吗?

Pav*_*ule 5

任何varlena数据类型(所有长度可变的类型或长度超过 4 字节(32 位)或 8 字节(64 位)的类型)都可以进行 TOAST - TOAST 是一个尝试将长行(记录)减少到 8KB 页面大小的过程。

在物理存储到关系之前检查行大小。当大小超过 2KB 时,大多数较大的字段将被选择、压缩、切片为 2KB 块并移动到后缀为_toast. 指向 toast 文件的指针会替换主存储中的数据。当行大于 2KB 时,重复此过程。

按照a_horse_with_no_name 和 IMSoP 提供链接获取更详细的文档。


Str*_*tr. 2

如果你的表叫t1,那么\d+ t1在你的psql提示符下输入,它会显示列存储模式