Default values are, according to documentation for min_wal_size and max_wal_size parameters:

For max_wal_size: The default is 1 GB
For min_wal_size: The default is 80 MB

Then I look this parameters from my database config:

select name, setting, unit 
from pg_settings 
where name in ('min_wal_size', 'max_wal_size')

Gives result:

name         |  setting | unit
max_wal_size | 64       | 
min_wal_size | 5        |

I have 2 questions:

1) Why these values doesn't match default values, which are shown in docs? I never changed config settings at all.

2) Why unit column is empty/NULL for these parameters? What means 64 and 5 values in this case? MB? GB? Or what?

Why this is not like for example work_mem parameter, when everything is clear:

name         | setting  | unit
work_mem     | 4096     | kB

These are 16 MB WAL segments by default. The manual:

The system physically divides this sequence into WAL segment files, which are normally 16MB apiece (although the segment size can be altered when building PostgreSQL)

So, it's just default values as advertised:

select name, setting, setting::int * 16 || 'MB' AS setting_in_mb
from pg_settings 
where name in ('min_wal_size', 'max_wal_size');

unit in pg_settings is present when it's an actual base unit like second or MB. In this case the "unit" would be "WAL segments", which can be configured before compiling Postgres. The unit column is just NULL for those.


2021 Update:

In a Postgres 12.3 setup, this query now returns with units:

select name, setting, unit 
from pg_settings 
where name in ('min_wal_size', 'max_wal_size');


     name     | setting | unit
 max_wal_size | 1024    | MB
 min_wal_size | 80      | MB
(2 rows)

Additionally, the documentation states that:

If this value is specified without units, it is taken as megabytes. The default is 1 GB.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.