美好的一天,我正在阅读关于 TOAST 的 Postgres 文档,但我没有找到任何关于 TOAST 如何在 MVCC 方面工作的信息。根据 postgres 的文档。
仅当要存储在表中的行值大于 TOAST_TUPLE_THRESHOLD 字节(通常为 2 kB)时,才会触发 TOAST 管理代码。
据我了解,如果字段足够大并且具有可变长度,那么 postgres 不会将此字段直接存储在元组块中,而是存储对包含该字段的不同表(文件)的引用,其中包含 chunk_id 和 sequence_id。但是,MVCC 呢?假设我有一张桌子user(data jsonb , id int PK,name varchar(255))
。通常当更新行时,将创建新行,xmin 等于当前事务。假设 jsonb 字段在 TOAST 表中并且该字段未更新,postgres 会为更新的行创建一个新的 TOAST 实例,还是新行将对现有的 TOAST 值有一个新的引用?