The connection service file allows libpq connection parameters to be associated with a single service name. That service name can then be specified in a libpq connection string, and the associated settings will be used. This allows connection parameters to be modified without requiring a recompile of the libpq-using application. The service name can also be specified using the PGSERVICE
environment variable.
Service names can be defined in either a per-user service file or a system-wide file. If the same service name exists in both the user and the system file, the user file takes precedence. By default, the per-user service file is named ~/.pg_service.conf
. On Microsoft Windows, it is named %APPDATA%\postgresql\.pg_service.conf
(where %APPDATA%
refers to the Application Data subdirectory in the user's profile). A different file name can be specified by setting the environment variable PGSERVICEFILE
. The system-wide file is named pg_service.conf
. By default it is sought in the etc
directory of the PostgreSQL installation (use pg_config --sysconfdir
to identify this directory precisely). Another directory, but not a different file name, can be specified by setting the environment variable PGSYSCONFDIR
.
Either service file uses an “INI file” format where the section name is the service name and the parameters are connection parameters; see Section 34.1.2 for a list. For example:
# comment [mydb] host=somehost port=5433 user=admin
An example file is provided in the PostgreSQL installation at share/pg_service.conf.sample
.
Connection parameters obtained from a service file are combined with parameters obtained from other sources. A service file setting overrides the corresponding environment variable, and in turn can be overridden by a value given directly in the connection string. For example, using the above service file, a connection string service=mydb port=5434
will use host somehost
, port 5434
, user admin
, and other parameters as set by environment variables or built-in defaults.