• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] POSTGRES: Datenbank als anderer User restoren

coogor

Hacker
Moin Leute,

ich bin kein DB-Experte (zumindest nicht auf der Low-Level Ebene), aber habe jetzt folgendes Problem:

Ich habe einen Datenbank-Dump, der unter der Rolle A gelaufen ist. Auch ein Server, der darauf zugegriffen hat läuft unter A.

Im Systemstandard läuft der Server unter User B. Nun möchte ich den DB-Dump so zurückspielen, dass er ebenfalls unter der Rolle B läuft.
Problem: Wenn ich das Zurückspielen mit B mache (CREATE DATABASE my_DB WITH OWNER=B) kommen beim zurückspielen mehrere Fehlermeldungen ala 'Role A does not exist'.
Lege ich die DB mit Rolle A an, klappt das zurückspielen, aber der Server kann nicht drauf zugreifen.
Ändere ich den Eigentümer der DB auf B (ALTER DATABASE my_DB OWNER TO B) so taucht die DB im Server trotzdem nicht auf.
Was tun?
 
OP
coogor

coogor

Hacker
spoensche schrieb:
Hast du dem User B den auch die Rolle zugewiesen bzw. die Berechtigung gegeben die Rolle zu verwenden?
Ich denke mal: beide sind als (identische) Rolle angelegt, und
GRANT B TO A;
Damit ist A jetzt Mitglied der Rolle von B. Sollte doch richtig sein.....

@marce: wäre auch eine Möglichkeit, allerdings kenne ich mich mit sed und regulären Ausdrücken auch nicht aus...
 

komma4

Member
coogor schrieb:
kenne ich mich mit sed und regulären Ausdrücken auch nicht aus...

Meine PostgreSQL Datensicherung besteht aus TEXT - lade die deine mal in einen Editor.
Dann geht das Ersetzen des Benutzernamens mit Suchen/Ersetzen
 
OP
coogor

coogor

Hacker
Danke für die Antworten, ich glaube ich habe das Problem geknackt:
psql -c "CREATE USER A WITH CREATEDB;"
createdb gnuhealth24 --encoding='UTF8' –owner=A
# Restore the database
psql gnuhealth24 < /mnt/gnuhealth_demo24-mar23

psql -c "ALTER DATABASE gnuhealth24 OWNER TO B;"
psql -c "GRANT A TO B;“
So funktioniert es zumindest in meinem Testsystem :)
 
Oben