Pré-requis :
si la sauvegarde se fait par un script lancé depuis un serveur distant assurez vous que votre pg_ident et / ou pg_hba soit correctement configuré
Suivant ce que votre base de données comprends : séquences, procédures stockées, fonctions faites vos grant selon :
  • Pour les tables :
grant select on all tables in schema <votre_schéma> to <user_backup>;
  • Pour les séquences :
grant select on all sequences in schema <votre_schéma> to <user_backup>;
  • Pour les fonctions :
grant execute on all functions in schema <votre_schéma> to <user_backup>;
  • Pour les procédures :
grant execute on all procedures in schema <votre_schéma> to <user_backup>;
Généralement dans 90% des cas <votre_schéma> est public
psql -p <port> -Atc "SELECT datname FROM pg_database WHERE datistemplate = false;" | \
while IFS= read -r db; do
  [ -z "$db" ] && continue
  echo "==> $db"
  psql -p <port> -d "$db" <<EOF
GRANT USAGE ON SCHEMA <nom_schéma> TO <nom_utilisateur>;
GRANT SELECT ON ALL TABLES IN SCHEMA <nom_schéma> TO <nom_utilisateur>;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA <nom_schéma> TO <nom_utilisateur>;
ALTER DEFAULT PRIVILEGES IN SCHEMA <nom_schéma> GRANT SELECT ON TABLES TO <nom_utilisateur>;
ALTER DEFAULT PRIVILEGES IN SCHEMA <nom_schéma> GRANT SELECT ON SEQUENCES TO <nom_utilisateur>;
EOF
done