Checkpoint is a mandatory process. To understand this, let's discuss blocks. PostgreSQL always reads and writes data in blocks. Consider the
emp table. It has just one record. The data in this record should add up to a few bytes; we have the value
1 in the column
id, and the value
Newname in the column
first_name. However, this table will consume 8K in the disk because PostgreSQL works with 8K blocks. A block is also referred to as a page. It is easy to verify that PostgreSQL uses blocks. Ensure that our table has just one record as follows:
SELECT * FROM emp; id | first_name ----+------------ 1 | Newname (1 row)
Then, we find the filename:
SELECT pg_relation_filepath('emp'); pg_relation_filepath ---------------------- base/24741/24742 (1 row)
Now, we check the size of the file:
\! ls -l /pgdata/9.3/base/24741/24742 -rw-------. 1 postgres postgres 8192 Nov 15 11:33 /pgdata/9.3/base/24741/24742
8192 bytes = 8K. So, a table with just one record takes up 8K.
Let's try inserting some...