如何获取 Postgres 数据库的页面大小?

Joh*_*ohn 6 postgresql

有没有办法选择 Postgres 数据库的页面大小?

我知道页面大小通常是 8K。我还从 2003 年开始阅读此电子邮件主题。我不知道这pg_controldata会起作用,因为我无权访问托管数据库的文件系统。

Erw*_*ter 11

如果您无法访问pg_controldata...

有一个简单的方法:

test=# SELECT current_setting('block_size');
 current_setting
-----------------
 8192
Run Code Online (Sandbox Code Playgroud)

手册:

以下“参数”是只读的,在编译或安装 PostgreSQL 时确定。[...]

block_size( integer)

报告磁盘块的大小。它是由BLCKSZ构建服务器时的值决定的。默认值为 8192 字节。某些配置变量(例如shared_buffers)的含义受block_size. 有关信息,请参阅第 19.4 节

验证

创建一个只有 1 个小行的虚拟表:分配了一个数据页。然后检查“主要”关系叉的大小pg_relation_size()

test=# CREATE TEMP TABLE foo AS SELECT 1 AS id;
SELECT 1
test=# SELECT pg_size_pretty(pg_relation_size('pg_temp.foo'));
 pg_size_pretty
----------------
 8192 bytes
(1 row)
Run Code Online (Sandbox Code Playgroud)

所以页面大小是 8 kB,这并不奇怪,就像你提到的那样。手册:

每个表和索引都存储为一个固定大小的页面数组(通常为 8 kB,尽管在编译服务器时可以选择不同的页面大小)。