pg_config
es para información de compilación, para ayudar a las extensiones y programas de clientes a compilar y vincular contra PostgreSQL. No sabe nada sobre las instancias activas de PostgreSQL en la máquina, solo los binarios.
pg_hba.conf
puede aparecer en muchos otros lugares dependiendo de cómo se instaló Pg. La ubicación estándar es pg_hba.conf
en el data_directory
de la base de datos (que podría ser en /home
, /var/lib/pgsql
, /var/lib/postgresql/[version]/
, /opt/postgres/
, etc, etc, etc) pero los usuarios y envasadores pueden ponerlo donde quieran. Desafortunadamente.
La única forma válida de encontrar pg_hba.conf
es preguntarle a una instancia de PostgreSQL en ejecución dónde pg_hba.conf
está, o preguntarle al administrador del sistema dónde está. Ni siquiera puede confiar en preguntar dónde está el datadir y analizar postgresql.conf
porque un script de inicio podría pasar un parámetro como -c hba_file=/some/other/path
al iniciar Pg.
Lo que quieres hacer es preguntarle a PostgreSQL:
SHOW hba_file;
Este comando debe ejecutarse en una sesión de superusuario, por lo que para las secuencias de comandos de shell puede escribir algo como:
psql -t -P format=unaligned -c 'show hba_file';
y establecer las variables de entorno PGUSER
, PGDATABASE
etc para asegurarse de que la conexión es correcta.
Sí, esto es algo así como un problema de huevo y gallina, en el sentido de que si el usuario no puede conectarse (por ejemplo, después de arruinar la edición pg_hba.conf
) no puede encontrarlo pg_hba.conf
para solucionarlo.
Otra opción es mirar la ps
salida del comando y ver si el argumento del directorio de datos del postmaster -D
está visible allí, p. Ej.
ps aux | grep 'postgres *-D'
ya pg_hba.conf
que estará dentro del directorio de datos (a menos que esté en Debian / Ubuntu o alguna derivada y esté usando sus paquetes).
Si se dirige específicamente a sistemas Ubuntu con PostgreSQL instalado desde paquetes Debian / Ubuntu, se vuelve un poco más fácil. No tiene que lidiar con la Pg compilada a mano desde la fuente para la cual el dadir de datos de alguien initdb
en su directorio de inicio, o una instalación de EnterpriseDB Pg en / opt, etc. Puede preguntar pg_wrapper
, la Pg de múltiples versiones de Debian / Ubuntu manager, donde PostgreSQL está utilizando el pg_lsclusters
comando de pg_wrapper
.
Si no puede conectarse (Pg no se está ejecutando o necesita editar pg_hba.conf
para conectarse), tendrá que buscar pg_hba.conf
archivos en el sistema . En Mac y Linux, algo como sudo find / -type f -name pg_hba.conf
lo hará. Luego verifique el PG_VERSION
archivo en el mismo directorio para asegurarse de que sea la versión correcta de PostgreSQL si tiene más de uno. (Si pg_hba.conf
está en /etc
/, ignore esto, es el nombre del directorio principal). Si tiene más de un directorio de datos para la misma versión de PostgreSQL, tendrá que mirar el tamaño de la base de datos, verifique la línea de comando de los postgres en ejecución ps
para ver si el -D
argumento del directorio de datos coincide con el que está editando, etc.