Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres如何更新堆文件中的可变长度记录_Postgresql_Storage - Fatal编程技术网

Postgresql Postgres如何更新堆文件中的可变长度记录

Postgresql Postgres如何更新堆文件中的可变长度记录,postgresql,storage,Postgresql,Storage,我读过关于物理存储的文章“”。但我不明白Postgres是如何更新文件中的可变长度记录的。Postgres是否移动相邻行或创建新行,并将旧行标记为已删除?您应该读取自身以获取可靠信息 PostgreSQL表被划分为8kB大小的块。每个记录(官方单词为“tuple”)存储在一个块中 PostgreSQL试图通过在与表关联的“TOAST表”中存储长度可变的数据类型,来压缩超过2kB的元组。这种技术确保即使是大的行也可以存储在单个块中 PostgreSQL从不更新元组。在UPDATE语句期间,将一个新

我读过关于物理存储的文章“”。但我不明白Postgres是如何更新文件中的可变长度记录的。Postgres是否移动相邻行或创建新行,并将旧行标记为已删除?

您应该读取自身以获取可靠信息

PostgreSQL表被划分为8kB大小的块。每个记录(官方单词为“tuple”)存储在一个块中

PostgreSQL试图通过在与表关联的“TOAST表”中存储长度可变的数据类型,来压缩超过2kB的元组。这种技术确保即使是大的行也可以存储在单个块中

PostgreSQL从不更新元组。在
UPDATE
语句期间,将一个新元组插入到具有足够可用空间的块中,并标记旧元组 被取代了;旧元组对于快照早于更新事务的并发语句仍然可见

旧元组最终会被释放。然后,新元组可以重用空闲空间