snippetsqlModerate
How can I get the page size of a Postgres database?
Viewed 0 times
canthepostgressizedatabasegetpagehow
Problem
Is there some way to select the page size of a Postgres database?
I know that the page size is usually 8K. I also read this email thread from 2003. I don't know that
I know that the page size is usually 8K. I also read this email thread from 2003. I don't know that
pg_controldata will work as I don't have access to the filesystem that the database is hosted on.Solution
If you don't have access to
There is a simple way:
The manual:
The following “parameters” are read-only, and are determined when
PostgreSQL is compiled or when it is installed. [...]
Reports the size of a disk block. It is determined by the value of
meaning of some configuration variables (such as shared_buffers) is
influenced by
To verify
Create a dummy table with only 1 small row: one data page is allocated. Then check the size of the "main" relation fork with
So the page size is 8 kB, which is hardly surprising like you mentioned. The manual:
Every table and index is stored as an array of pages of a fixed size (usually 8 kB, although a different page size can be selected when compiling the server).
pg_controldata ...There is a simple way:
test=# SELECT current_setting('block_size');
current_setting
-----------------
8192The manual:
The following “parameters” are read-only, and are determined when
PostgreSQL is compiled or when it is installed. [...]
block_size (integer)Reports the size of a disk block. It is determined by the value of
BLCKSZ when building the server. The default value is 8192 bytes. Themeaning of some configuration variables (such as shared_buffers) is
influenced by
block_size. See Section 19.4 for information.To verify
Create a dummy table with only 1 small row: one data page is allocated. Then check the size of the "main" relation fork with
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)So the page size is 8 kB, which is hardly surprising like you mentioned. The manual:
Every table and index is stored as an array of pages of a fixed size (usually 8 kB, although a different page size can be selected when compiling the server).
Code Snippets
test=# SELECT current_setting('block_size');
current_setting
-----------------
8192test=# 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)Context
StackExchange Database Administrators Q#239917, answer score: 16
Revisions (0)
No revisions yet.