checkpoint is an operation which flushes all "dirty" (altered or new) data pages in memory to the on-disk datafiles. It is guaranteed that all changes logged in the WAL up until the checkpoint are present in the datafiles.
Checkpoints are executed automatically, usually at regular intervals, by the checkpointer process (however they will be skipped if the system has been idle since the last checkpoint).
Checkpoints cause spikes in I/O load, so checkpoint configuration is an important consideration when tuning PostgreSQL server performance.
The following parameters influence how often a checkpoint is carried out:
min_wal_size(PostgreSQL 9.5 and later)
checkpoint_segments(PostgreSQL 9.4 and earlier)
checkpoint_completion_target can be adjusted to spread out the checkpoint process, reducing the amount of I/O generated by the checkpoint.
Note that it is not possible to disable the checkpointer, not would that ever make sense; however by setting
1d (one day, the maximum), and
max_wal_size to a very large value, it's possible to delay regular checkpoints for a very long time, e.g. for testing purposes.
The documentation section WAL Configuration has a good overview of the checkpointing procress.
A checkpoint can be manually forced by a database superuser with the CHECKPOINT command, however in normal operation this will usually not be required.
By default, routine checkpoints are not logged. Set
on to enable checkpoint logging (see that entry for more details).