Pg_dumpall wieder einspielen - Dateirechte?

Ausgabe von pg_dumpall > pgdumpall:
-rw-r–r-- 1 postgres postgres 3880148 Jan 15 20:52 pgdumpall

Beim Versuch, dieses backup zurückzuspielen:

user@pi5:~$ sudo -u postgres psql -f pgdumpall template1
psql: error: pgdumpall: Permission denied

user@pi5:~$ sudo psql -f pgdumpall template1
psql: error: connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: FATAL: role “root” does not exist

Wie müssen die Dateirechte/Eigentümer gesetzt werden, damit das file eingespielt wird?

Die zweite Variante ist ziemlich sicher nicht zielführend. Es sei denn der User user@pi5 hat von Haus aus postgres Rechte, Gruppenmitgliedschaft o.ä.
Der erste Versuch sieht eigentlich nicht schlecht aus, auch wenn der Dateiname des Dumps mich irritiert hat und mir nicht klar ist, was das template1 soll. Du spielst ja einen Dump ein, in dem alles drin ist.
Stammt der Dump von diesem System oder von einem anderen?

Ich würde die Befehle separat versuchen.
erst als User postgres anmelden
dann psql -f

Beim ersten Versuch ist das Problem, daß der Betriebssystemuser postgres keine Leserechte auf die Datei pgdumpall hat — oder auf das Directory, in dem die Datei liegt. Eine mögliche Lösung ist, die Datei an einen Ort zu verschieben, von dem jeder lesen kann, und die Berechtigungen der Datei zu ändern:

mv pgdumpall /tmp
chmod o+r /tmp/pgdumpall
sudo -u postgres psql -f /tmp/pgdumpall -d postgres

DIe Alternative wäre, den Betriebssystemuser user zu berechtigen, sich lokal als Datenbankuser postgres anzumelden. Wenn in pg_hba.conf als Authentisierungsmethode trust steht, geht das einfach so:

psql -U postgres -d postgres -f pgdumpall

Wenn die Authentisierungsmethode peer ist, muß man den User explizit zulassen. Dazu ändert man den Eintrag in pg_hba.conf so, daß eine User Map dabeisteht:

local   all    all    peer map=mymap

In der pg_ident.conf muß man dann eintragen:

mymap    postgres    postgres
mymap    user        postgres

Nach einem Reload sollte es dann funktionieren.