1、什么是TOAST?
TOAST,全称是The Oversized-Attribute Storage Technique, 超大属性存储技术,顾名思义,就是说Pg中超长字段在数据库中的存储方式。
主要用来应对物理数据行超过数据块(页)大小的场景。
在PG中,页(或者叫block)是数据在文件存储中的基本单位,它的大小是固定的,并且只能在编译期指定,之后无法修改,默认的大小为8kb。同时PG不允许一行数据跨页存储。因此页大小就是行大小的硬上限,因此,数据库就无法直接存储很大的字段值,为了克服这一限制,Pg引入了TOAST技术,TOAST技术是采用压缩和切片的方式,使得行的大小变小。
注意:这一技术对用户来说是完全透明的,用户不需要关注这一技术实现。
2、怎么理解压缩和切片?
我们创建的每个表都有自己关联且唯一的TOAST表。当数据超过TOAST_TUPLE_THRESHOLD(默认2KB)时,Postgres将压缩数据,以适应2KB的缓冲区大小。如果对大列数据的压缩没有导致更小的块(<2KB),那么它将被拆分为更小的块,并存储在相关TOAST表中的多个物理行(行外存储)。每个原始字段值都被一个指针替换,根据这个指针可以找到行外存储的数据。
3、怎么查看与原始表相关的TOAST表?
select relname from pg_class where oid =
(select reltoastrelid from pg_class where relname=’TABLE_NAME’)
通常表名为&