PostgreSQL 内部揭秘:新手指南之数据存储(第一部分)

PostgreSQL 内部揭秘:新手指南之数据存储(第一部分)

💡 原文英文,约1200词,阅读约需5分钟。
📝

内容提要

PostgreSQL在创建表时会生成元数据,并将数据存储在以整数标识符命名的文件中。该文件位于数据库的数据目录中。向表中添加数据会将数据写入文件中,可以通过文件系统访问和查看文件。PostgreSQL以8K块的形式写入数据,可以使用heap_page_items()调用查看数据。

🔎

延伸解读

表名与文件名的映射关系

PostgreSQL 内部使用整数标识符(attrelid)来引用表,而不是表名。创建表时,系统会生成一个以 attrelid 命名的文件,该文件位于数据目录下的 base 子目录中。例如,表 demo1 的 attrelid 为 16935,其文件路径为 base/16934/16935。这种设计使得数据库能够高效管理对象,但用户需注意 attrelid 因环境而异,不能直接套用示例中的数值。

数据插入后的文件变化

向表中插入数据后,数据会写入以 attrelid 命名的文件中。默认情况下,PostgreSQL 以 8K 块为单位写入数据。示例中插入 6 行数据后,文件大小从 0 变为 8192 字节,即一个数据块。如果数据超过 8K,则会占用多个块。这解释了为什么空表文件大小为 0,而插入数据后文件立即增长。

查看数据内容的注意事项

使用 heap_page_items() 函数可以查看数据块中的具体内容,但显示的数据以八进制形式呈现。例如,插入的十进制数 1、3、5 等会显示为八进制格式。这可能会让初学者困惑,需注意转换。此外,该函数还返回 lp、lp_off 等字段,这些字段的详细含义将在后续部分介绍。

❓

Q&A

PostgreSQL创建表时会生成什么元数据?

PostgreSQL在创建表时会生成与表相关的元数据,包括表的attrelid、列名和列类型等信息。

如何查看PostgreSQL数据库的数据目录?

可以使用命令'show data_directory'来查看PostgreSQL数据库的数据目录。

PostgreSQL中数据是如何存储的?

PostgreSQL将数据以8K块的形式存储在以attrelid命名的文件中,文件位于数据库的数据目录下。

如何查看PostgreSQL表中的数据?

可以使用heap_page_items()调用查看表中数据,数据会以八进制形式显示。

PostgreSQL中表的attrelid是什么?

attrelid是一个整数标识符,用于唯一标识PostgreSQL中的表。

向PostgreSQL表中插入数据后,数据存储在哪里?

数据会被写入名为attrelid的文件中,例如文件名为16935。

🏷️

标签

➡️

继续阅读