pg_config
is for compliation information, to help extensions and client programs compile and link against PostgreSQL. It knows nothing about the active PostgreSQL instance(s) on the machine, only the binaries.
pg_hba.conf
can appear in many other places depending on how Pg was installed. The standard location is pg_hba.conf
within the data_directory
of the database (which could be in /home
, /var/lib/pgsql
, /var/lib/postgresql/[version]/
, /opt/postgres/
, etc etc etc) but users and packagers can put it wherever they like. Unfortunately.
The only valid ways find pg_hba.conf
is to ask a running PostgreSQL instance where it's pg_hba.conf
is, or ask the sysadmin where it is. You can't even rely on asking where the datadir is and parsing postgresql.conf
because an init script might passed a param like -c hba_file=/some/other/path
when starting Pg.
What you want to do is ask PostgreSQL:
SHOW hba_file;
This command must be run on a superuser session, so for shell scripting you might write something like:
psql -t -P format=unaligned -c 'show hba_file';
and set the environment variables PGUSER
, PGDATABASE
, etc to ensure that the connection is right.