在PostgreSQL中,如何判断text列是内联存储还是存储在"后台表"中?
文本列类型的文档说明了这一点
非常长的值也存储在后台表中,因此它们不会干扰对较短列值的快速访问.
是否存在固定长度,其中一个值被确定为"非常长"?如果没有,是否有其他方法可以告诉我的列如何在磁盘上布局?我有一个包含多个列text(或varchar(n))的表,并希望了解它们是如何存储在引擎盖下的.某处有关于这些"背景表"的更多文档吗?
任何varlena数据类型(所有长度可变的类型或长度超过 4 字节(32 位)或 8 字节(64 位)的类型)都可以进行 TOAST - TOAST 是一个尝试将长行(记录)减少到 8KB 页面大小的过程。
在物理存储到关系之前检查行大小。当大小超过 2KB 时,大多数较大的字段将被选择、压缩、切片为 2KB 块并移动到后缀为_toast. 指向 toast 文件的指针会替换主存储中的数据。当行大于 2KB 时,重复此过程。
按照a_horse_with_no_name 和 IMSoP 提供的链接获取更详细的文档。