¿Cómo puedo encontrar la ruta a pg_hba.conf desde el shell?

71

Me gustaría obtener la ruta a pg_hba.conf desde el shell. La ruta varía entre las versiones de PostgreSQL. Por ejemplo, para 8.4 y 9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

He intentado con el comando pg_config , pero no parece incluir esta información.

Esto es para que pueda usar un comando uniforme para abrir pg_hba.conf y otros archivos de configuración de PostgreSQL para su edición.

Estoy usando bash.

    
pregunta Roger Dahl 15.02.2013 - 18:38

6 respuestas

107

pg_config es para información de compilación, para ayudar a las extensiones y programas de cliente 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 según cómo se haya instalado Pg. La ubicación estándar es pg_hba.conf dentro del data_directory de la base de datos (que podría ser en /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ , etc etc.) pero los usuarios y los empaquetadores pueden ponerlo donde quieran. . Desafortunadamente.

Las únicas formas válidas de encontrar pg_hba.conf es preguntar a una instancia de PostgreSQL en ejecución donde está pg_hba.conf , o preguntar a sysadmin 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 preguntar a PostgreSQL:

SHOW hba_file;

Este comando debe ejecutarse en una sesión de superusuario, por lo que para las secuencias de comandos del shell puede escribir algo como:

psql -t -P format=unaligned -c 'show hba_file';

y configure las variables de entorno PGUSER , PGDATABASE , etc. para garantizar que la conexión sea 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 atornillar editando pg_hba.conf ) no puede encontrar pg_hba.conf para arreglarlo .

Otra opción es ver el resultado del comando ps y ver si el argumento del directorio de datos del postmaster -D está visible allí, por ejemplo,

ps aux  | grep 'postgres *-D'

ya que pg_hba.conf estará dentro del directorio de datos (a menos que esté en Debian / Ubuntu o algún derivado y use 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 ocuparse de la Pg compilada manualmente desde la fuente en la que alguien% s_de_da% da datadir en su directorio de inicio, o una instalación de EnterpriseDB P en / opt, etc. Puede preguntar initdb , el Debian / Ubuntu multi-versión Pg manager, donde PostgreSQL está usando el comando pg_wrapper de pg_lsclusters .

Si no puede conectarse (Pg no se está ejecutando, o necesita editar pg_wrapper para conectarse), tendrá que buscar en el sistema los archivos pg_hba.conf . En Mac y Linux, algo como pg_hba.conf funcionará. Luego, compruebe el archivo sudo find / -type f -name pg_hba.conf en el mismo directorio para asegurarse de que sea la versión correcta de PostgreSQL si tiene más de uno. (Si PG_VERSION está en pg_hba.conf /, ignore esto, es el nombre del directorio principal en su lugar). Si tiene más de un directorio de datos para la misma versión de PostgreSQL, tendrá que ver el tamaño de la base de datos, verifique la línea de comando de la ejecución de postgres desde /etc para ver si su directorio de datos ps coincide con el lugar donde se encuentra edición, etc.

    
respondido por el Craig Ringer 16.02.2013 - 03:18
17

Así es como lo hago:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Dado que la ruta es así: /etc/postgresql/[VERSION]/main/pg_hba.conf

    
respondido por el its_me 29.08.2013 - 13:42
2

Estoy utilizando lo siguiente para la detección de archivos de configuración:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
    
respondido por el radeklos 10.10.2014 - 13:07
1

Editar la pg_hba.conf correcta con su editor visual predeterminado (vim, emacs, nano, joe, etc.) es tan fácil como:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf

    
respondido por el christianbundy 24.04.2015 - 22:30
0

Pregunte en su base de datos:

$ psql -U postgres
postgres=# SHOW config_file;
respondido por el Keerthi S 04.06.2018 - 13:55
-2

Para saber dónde está el archivo simplemente escribe:

pg_lsclusters
    
respondido por el nirvanastack 13.10.2013 - 23:53

Lea otras preguntas en las etiquetas