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

时间:2014-03-31 16:52:54

标签: postgresql rdbms

在PostgreSQL中,如何判断text列是否内联存储或存储在"背景表"?

文本列类型的

Documentation表示

  

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

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

2 个答案:

答案 0 :(得分:4)

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

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

关注links provided by a_horse_with_no_name and IMSoP以获取更详细的文档。

答案 1 :(得分:2)

如果您的表名为t1,则在psql提示符处输入\d+ t1,它将显示存储模式列