在PostgreSQL中,如何判断text
列是否内联存储或存储在"背景表"?
非常长的值也存储在后台表中,这样它们就不会干扰对较短列值的快速访问。
是否存在固定长度,其中确定的值非常长"?如果没有,是否有其他方法可以告诉我的列如何在磁盘上布局?我有一个包含多个text
(或varchar(n)
)列的表,并希望了解它们是如何存储在引擎盖下的。是否有更多关于这些"背景表的文档"某处?
答案 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
,它将显示存储模式列。