Base de datos
La contraseña es correcta y aun así se rechaza. En PostgreSQL el método de autenticación depende de desde dónde conectas, y eso lo decide pg_hba.conf.
pg_hba.conf se lee de arriba abajo y gana la primera línea que casa con el trío origen, base de datos y usuario. Una línea de más arriba puede estar aplicando un método distinto del que crees.
En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.
La línea que aplica no es la que piensas, y exige otro método.
Comprobar
sudo -u postgres psql -c "SELECT * FROM pg_hba_file_rules WHERE error IS NULL;"Corregir
# Ajustar el orden o el método en pg_hba.conf y recargar:
sudo systemctl reload postgresqlLa contraseña se guardó con un método distinto del que se exige ahora. Al pasar de md5 a scram-sha-256, las contraseñas antiguas dejan de validar hasta que se vuelven a establecer.
Comprobar
sudo -u postgres psql -c "SELECT rolname, substring(rolpassword,1,4) FROM pg_authid WHERE rolcanlogin;"Corregir
sudo -u postgres psql -c "ALTER USER mi_usuario WITH PASSWORD 'la_nueva';"La contraseña que viaja no es la que crees. Un carácter especial dentro de una cadena de conexión hay que codificarlo como en una URL, y una variable PGPASSWORD antigua en el entorno gana a lo que escribes.
Comprobar
echo "${PGPASSWORD+PGPASSWORD está definida en el entorno}"
grep -l . ~/.pgpass 2>/dev/nullCorregir
# Probar la contraseña aislada del resto, sin cadena de conexión:
PGPASSWORD='la_contrasena' psql -h 127.0.0.1 -U mi_usuario -d mi_base -c 'SELECT 1;'
# En una URL, @ : / y ? van codificados: 'p@ss' se escribe 'p%40ss'.Se editó pg_hba.conf y no se recargó la configuración.
Comprobar
sudo -u postgres psql -c "SELECT pg_conf_load_time();"Corregir
sudo systemctl reload postgresqlpg_hba_file_rules es la forma fiable de saber qué reglas está aplicando el servidor de verdad, incluidos los errores de sintaxis. Leer el fichero a mano lleva a conclusiones equivocadas cuando hay varias líneas que casan.
Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.
Soporte Linux y DevOps en español