If you don't have access to pg_controldata
...
There is a simple way:
test=# SELECT current_setting('block_size');
current_setting
-----------------
8192
The 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. The
meaning 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).