postgresql – ¿Cómo encuentro la ruta a pg_hba.conf desde el shell?

Pregunta:

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

pg_config 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 editar.

Estoy usando bash.

Respuesta:

pg_config es para obtener información de cumplimiento, para ayudar a las extensiones y los programas cliente a compilar y vincular con PostgreSQL. No sabe nada sobre las instancias de PostgreSQL activas en la máquina, solo los binarios.

pg_hba.conf puede aparecer en muchos otros lugares dependiendo de cómo se haya instalado Pg. La ubicación estándar es pg_hba.conf dentro del data_directory de datos de la base de datos (que podría estar en /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ , etc., etc., etc.) pero los usuarios y los empaquetadores pueden colocarlo donde quieran. Desafortunadamente.

Las únicas formas válidas de encontrar pg_hba.conf es preguntar a una instancia de PostgreSQL en ejecución dónde está pg_hba.conf , o preguntarle al administrador del sistema dónde está. Ni siquiera puede confiar en preguntar dónde está el directorio de datos y analizar postgresql.conf porque un script de inicio podría pasar un -c hba_file=/some/other/path 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 la creación de scripts de shell puede escribir algo como:

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

y configure las variables de entorno PGUSER , PGDATABASE , etc. para asegurarse de que la conexión sea correcta.

Sí, esto es algo así como un problema de la gallina y el huevo, ya que si el usuario no puede conectarse (digamos, después de pg_hba.conf edición de pg_hba.conf ) no puede encontrar pg_hba.conf para solucionarlo.

Otra opción es mirar la salida del comando ps y ver si el argumento del directorio de datos de 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. Usted no tiene que hacer frente a Pg de alguien que compilan-de-fuente a mano initdb 'da datadir en su directorio personal, o un Pg EnterpriseDB instalan en / opt, etc Usted puede pedir pg_wrapper , la Debian / Ubuntu multi- administrador de versiones Pg, donde PostgreSQL está utilizando los 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 en el sistema los archivos pg_hba.conf . En Mac y Linux, algo como sudo find / -type f -name pg_hba.conf servirá. Luego, verifique el archivo PG_VERSION en el mismo directorio para asegurarse de que sea la versión correcta de PostgreSQL si tiene más de una. (Si pg_hba.conf está en /etc /, ignore esto, es el nombre del directorio padre en su lugar). 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 del postgres en ejecución desde ps para ver si el argumento -D directorio de datos coincide con el lugar donde está editando, etc. .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım