Hallo Allerseits,
weiss nicht, ob meine Frage hier hin oder eher ins Lazarusforum gehört. Da sich aber im deutschen Lazarusforum nicht so arg viele mit PostgreSQL auskennen, versuche ich hier mal mein Glück
Ich nutze in einem mit Lazarus erstellten Programm eine Postgres-Datenbank. Soweit so gut. Nun möchte ich gerne ein Backup machen können (mit pg_dump und psql), funktioniert soweit auch.
Nun möchte ich gern, dass ein Nutzer (mit administrativen Rechten - er weiss dann, was er tut) mit meinem Programm, ein Backup erstellen kann (dies geht problemlos) und ein Backup wieder einspielen kann (hier das Problem).
Meine bisherige Vorgehensweise ist:
Sichern:
- mit “pg_dump --host=localhost --port=5432 -w --username=postgres --file=Dateiname”
Wieder einspielen:
- vorhandene Datenbank “vigema” löschen, um dem Problem doppelter Inhalte aus dem Weg zu gehen
- Datenbank wieder erstellen
- Datenbank füllen mit “psql --host=localhost --port=5432 -w --username=postgres vigema < Dateiname”
Zum Problem:
Greife ich zuvor mit einer Connection (TPQConnection) auf meine Datenbank zu, wird der Nutzer (Login-Rolle), der in der Connection eingetragen ist, Postgres übermittelt. D.h. wenn ich die Connection trenne (TPQConnection.Connected:=false) bleibt die Login-Rolle scheinbar als “aktiv” in Postgres stehen. Versuche ich dann die Datenbank zu löschen, kommt es immer zum Abbruch mit der Meldung, dass noch aktive Verbindungen zu der Datenbank bestehen!
Daher meine Frage, ob mein Vorgehen mit dem Backup fachlich richtig ist?
Wenn ja, gibt es eine Möglichkeit einen Nutzer (Login-Rolle) von außen “hart” abzumelden (am besten mit einem SQL-Befehl) oder gibt es sogar einen Befehl, der alle Nutzer abmeldet, sodaß sich alle neu anmelden müssten?
Wenn nein, wie dann?
Bin für alle sachdienlichen Hinweise dankbar!
Michael