Adding checksums to a database instance
When PostgreSQL is installed, a so-called database instance is created. This step is performed by a program called initdb
, which is a part of every PostgreSQL setup. Most binary packages will do this for you and you don't have to do this by hand.
Why should you care then? If you happen to run a highly critical system, it could be worthwhile to add checksums to the database instance. What is the purpose of checksums? In many cases, it is assumed that crashes happen instantly—something blows up and a system fails. This is not always the case. In many scenarios, the problem starts silently. RAM may start to break, or the filesystem may start to develop slight corruption. When the problem surfaces, it may be too late. Checksums have been implemented to fight this very problem. Whenever a piece of data is written or read, the checksum is checked. If this is done, a problem can be detected as it develops.
How can those checksums be enabled? All you have to do is to add -k
to initdb
(just change your init scripts to enable this during instance creation). Don't worry! The performance penalty of this feature can hardly be measured, so it is safe and fast to enable its functionality.
Keep in mind that this feature can really help prevent problems at fairly low costs (especially when your I/O system is lousy).