Generelle Vorgehensweise beim Datenbankupdate

Hallo,

wie gehe ich den grundsätzlich vor (bin Einsteiger), wenn ich in einem Client-Server Szenario ein Update und Veränderungen an den Tabellen vornehmen.
Folgende Frage stellt sich mir:

  1. Wer ist mit der Datenbank verbunden, und wie kann ich die Verbindung trennen und nicht mehr zulassen, bis das Update fertig ist?

Bin mir sicher,dass diese Frage im Forum schon beantwortet wurde, habe aber nichts passendes gefunden. Also wäre es nett, wenn ihr mit Tipps und Links antwortet.
Bubblegum

Was für Veränderungen? Daten updaten, oder Tabellenstruktur ändern?

Die gute Nachricht: in PG läuft alles in einer Transaktion.

  1. Wer ist mit der Datenbank verbunden, und wie kann ich die Verbindung trennen und nicht mehr zulassen, bis das Update fertig ist?

Wer verbunden ist, steht in pg_stat_activity, die Spalte procpid enthält die PID des Prozesses dazu, welche Du mit pg_cancel_backend killen kannst.
Verhindern, daß sich andere anmelden? Man könnte dies über die pg_hba.conf und/oder max_connections machen.

Aber der Aufwand ist einklich gar nicht nötig. Wenn Du z.B. ein ALTER TABLE machst, dann wartet das so lange brav, bis es sicher durchgeführt werden kann, also keine offenen Transaktionen die alte Struktur erwarten.


Andreas

@akretschmer
Danke für die Antworten, dass bringt mich ein Stück weiter.

Das Problem ist, dass gerade wenn ich ALTER TABLE Aktionen mache, und ein Client noch mit einer Softwareversion zugreift, die die alte Datenbankstrukur erwartet stürzt die Anwendung ab. Diese will ich im Vorfeld verhindern, indem ich alle raus kicke, die auf die Datenbank zugreifen, und dann exklusiv das DB-Update durchführe. Oder wie machst du das?

Keine praktischen Erfahrungen mit sowas. Erstelle halt eine neue pg_hba.conf dafür, die keinen reinläßt (außer dich), mache Dein Update, update die Clients und spiel die alte pg_hba wieder ein. Reload der Config reicht.


Andreas

Das ist der gängige Weg. Andernfalls kannst du auch nicht sicherstellen, dass die Clients sich nicht sofort wieder verbinden.

Danke! Aber was ist den ein pg_hba.conf (ich nehmen an eine Tabelle)? Aber wo finde ich die? Und wie mache ich das, dass die keinen außer mir rein lässt? Sorry, aber ich binEinsteiger.

Du bist Einsteiger, möchtest aber gleich tief in die Administration und Entwicklung einsteigen?
Wer garantiert dir, dass du keine fahrlässigen Fehler einbaust?

Wäre es nicht praktischer, erst mal einige Grundlagen aufzubauen?

Die Datei(!) pg_hba.conf befindet sich im Datenverzeichnis der Datenbank.

Autsch.

Ergänzend zu ads: PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Client Authentication

Und noch etwas: die Doku, also die Online-Doku oben, die hat auch eine Suchfunktion. Wenn man da den Begriff “pg_hba.conf” eintippt und danach sucht, ist der erste Treffer der oben stehene Link. Setz Dir 'ne Bookmark auf die Doku, das wird ab sofort Deine Lieblingsseite.


Andreas

Nur PostgreSQL Einsteiger. In Sachen Softwareentwicklung würde ich mich da eher nicht als Einsteiger sondern eher als Einstein. :sunglasses: bezeichnen. Habe vorher fast 20 Jahre mit Btrieve und SQL-Base gearbeitet. Habe extra PostgreSQL als SQL - Datenbank gewählt, da die Administration recht einfach und Wartungsfreundlich sein soll. Habe auch schon meine neue Anwendung auf PostgreSQL umgestellt (läuft auf Windows, Mac OSX und iPhone). Fast alles ohne Probleme. Die Updatealgorithmen (aktueller Post) und eine Limitierung der User - Anzahl (würde ich gerne mit PostgreSQL machen, wenn es sich dafür eignet) fehlt mir noch. Wieder zum Thema. Ich habe jetzt natürlich 100 folge Fragen, wie z.B. wie finde ich den Pfad für die “pg_hba.conf” Datei. Wie siehts mit den Zugriffsrechten aus? Etc. also werde ich wieder mal 24h alles zusammen suchen.

@Andreas
Habe die Doku. Trotzdem danke!



test=*# show hba_file;
               hba_file
--------------------------------------
 /etc/postgresql/8.4/main/pg_hba.conf
(1 row)

Zugriffsrechte erklärt Doku.

Andreas

Die lassen sich auch schneller beantworten - dafür gibt es entsprechende deutschsprachige Literatur. Dort wird so etwas gut erklärt :wink:

Du bist zu faul, die ISBN zu nennen? Ich lach mich schlapp … 3937514694.

Andreas

Es gibt schon nicht nur mein Buch, darum wollte ich da nicht speziell drauf verweisen - außerdem steht das in meiner Signatur.

Ich lese nur Bücher, die bei amazon volle 5 Sterne haben :wink:

Millionen Fliegen … g