On Ubuntu/Debian, the pg_ctlcluster wrapper is a convenient utility that allows multiple servers to coexist more easily, which is especially good when you have servers with different versions. This capability is very useful, and is transposed on systemd as shown in the examples using @ in the name of the service unit, where @ denotes the usage of a service file template.
Another interesting systemd feature is the capability to enable/disable a service unit to specify whether it will be started automatically on the next boot, with a syntax such as:
sudo systemctl enable postgresql@10-main
This can be very useful to set the appropriate behavior based on the purpose of each instance.
A similar feature is implemented on Ubuntu and Debian by the start.conf file, located next to the other configuration files (that is, in the same directory). Apart from the informational comments, it contains only a single word, with the following meaning:
- auto: The server will be started automatically on boot. This is the default when creating a new server. It is suitable for frequently used servers, such as those powering live services or being used for everyday development activities.
- manual: The server will not be started automatically on boot, but can be started with pg_ctlcluster. This is suitable for custom servers that are seldom used.
- disabled: The server is not supposed to be started. This setting is only a protection from starting the server accidentally. The pg_ctlcluster wrapper won't let you start it, but a skilled user can easily bypass the protection.