Estou tentando configurar o backup automático para postgres db em um servidor local sem periféricos no Debian. Eu tenho um roteiro:
#!/bin/bash
export PGPASSFILE='/home/mtn/.pgpass'
pg_dumpall -U db_user --verbose 2>/var/log/postgresql/pgdump.log | gzip > /mnt/bulk-data/db_backup/db_bak.gz
Tenha um .pgpass
arquivo:
-rw------- 1 mtn mtn 47 Nov 13 10:14 .pgpass
com:
*:*:*:postgres:guest
*:*:*:db_user:guest
E um sudo crontab -e
trabalho:
20 0 * * * /home/mtn/backup.sh >/dev/null 2>&1
pg_hba
:
local all postgres peer
Quando tento executá-lo, recebo:
pg_dumpall: error: could not connect to database "template1": FATAL: Peer authentication failed for user "db_user"
Onde está o erro?
PS Tudo funciona se eu alterar o script para ser executado como root sudo -u postgres pg_dumpall
.
ATUALIZAÇÃO : O que funcionou para mim no final é adicionar esta linha a pg_ident.conf
:
omicron root postgres
Então para pg_hba.conf
antes de tudo:
local all all ident map=omicron
E alterando o script para rodar pg_dumpall
como usuário postgres
(só porque db_user
não tinha todos os privilégios necessários para dumpall
).
peer
autenticação significa que o postgresql aceita conexões no soquete unix do usuário do sistema unix especificado sem senha como usuário do banco de dados especificado, portanto, tentar usar o PGPASS é inútil. Mais sobre opeer
acesso aqui: https://www.postgresql.org/docs/current/auth-peer.html No seu caso, vocêpg_hba.conf
permite que apenas o usuáriopostgres
do sistema conecte todos os bancos de dados como usuário do banco de dadospostgres
. Não consigo ver o seudb_user
no seupg_hba.conf
, então ele não pode se conectar.sudo -u postgres pg_dumpall
significa que você alterna para o usuário do sistemapostgres
e executapg_dumpall
como esse usuário se conectando como usuário do banco de dadospostgres
. É por isso que funciona.