Hallo Leute,
ich habe jetzt verschiedene Such meschanismen ausprobiert und hier auf dem Board nichts gefunden. Könnte aber sein, dass es zu diesem Thema schon was gab, dann postet mir bitte den Link.
So zu meinem Prob, ich möchte mit einem Befehl die Verbindungen zu meiner Datenbank abbrechen. Dabei möchte ich z.B. eine Bestimmte Verbindung abbrechen können.
pgadmin gibt zwar die Möglichkeit per “Server status” aber soetwas muss es doch auch als Befehl geben. Oder die Daten sind in irgendeiner Systemtabelle, in der ich die Daten auch manipulieren könnte.
Andreas ich habe mich über deine Antwort sehr gefreut.
Nur emfand ich das
Ja. Doku lesen
als Vorwurf. Sprich die Leute fragen nur und lesen nichts.
Das Kapitel 9.20 gibt es nicht in jeder Version von PostgreSQL.
Fehler von mir. Ich sollte meine Links aufräumen. Hatte noch einen Link
in meinen Favoriten der zu alt war. ( Dies hat sich nun geändert )
Schon okay. Wenn ich Hilfe gebe, versuche ich, dies als Hilfe zur Selbsthilfe zu machen. Im Usenet und in Mailinglisten, wo ich seit vielen Jahren bin, gibt es den Begriff ‘RTFM’, und in Verbindung mit einem Link dazu ist das einklich die effektivste Art der Hilfe. Mag sein, daß das in Foren nicht so ist, das ist für mich hier Neuland.
Nee die Art der Hilfe ist schon Okay. Link hat schon gereicht.
Nur wenn ich nun einer procpid das Cancel Signal sende, dann passiert nichts.
Sprich ich Verbinde mich mit 2 Clients und sage nun, dass er die procpid s von einem der Clients abbrechen soll und nichts passiert.
Also ich habe jetzt eine Große Transaction gestartet und dachte zuerst dies kann ich auch nicht Abbrechen, aber es hat nur etwas länger gedauert und siehe da diese Transaction wurde abgebrochen.
Nun suche ich immer noch eine Möglichkeit erst einmal zu sehen, wer bei mir auf der Datenbank ist. Dann möchte ich den Disconnecten und am Besten die Datenbank direkt danach für diesen Client sperren. Und erst wieder für andere freigeben wenn ich es möchte.
pg_stat_activity, ein System-View. Vorteilhaft ist, “stats_command_string = on” in der postgresql.conf.
Jedenfalls kannst Du pg_stat_activity User, IP und Query sehen, und auch die PID zum abschießen…
Ähm, Du willst dann die IP sperren? Mag ich jetzt nicht drüber diskutieren wollen, aber iptables ist ein sehr nettes Tool…
Was spricht dagegen, die Verbindung einfach zu schliessen?
Zu der Sache mit Systemtabellen manipulieren: damit schiesst du dir selber ins Bein: in dem Moment, in dem du die Manipulation durchführen würdest, wäre deine Verbindung weg … PG stellt das fest und rollt die gerade offene Transaktion zurück. Also ist alles wie vorher, ok, fast alles. Du bist nicht mehr online
Aber meines Wissens geht das nicht über Systemtabellen.
ich habe unter pg_stat_activity alle Information die ich benötige.
Nun bräuchte ich einfach ein Möglichkeit mit der ich einfach sagen könnte
KILL datid oder procpid.
Mit pg_cancel_backend kann ich nur eine aktive Aktion abbrechen. Oder verstehe ich das Falsch. Sitzte echt auf dem Schlauch.
Gibt es nicht irgendwo ein pg_who und ein pg_kill ???
Oder wo stehen die momentan Verbindungsdaten?? Sprich welcher Client
verbunden ist.
Das wäre ja toll, nur möchte ich alle Verbindungen schliessen außer meiner.
Lese alle Verbindungen aus dem Verbindungspool und breche alle ab außer meiner. So in etwa. Danach sperre ich die DB für alle außer mich.
Standalone Modus???
Sagt mir jetzt gar nichts. Irgend ein Link für mich.
Dieser Status wird nur kurzfristig sein, sprich ich will kurzfristig alles Sperren
und dann wieder öffnen.
pg_database manipulieren, funktioniert aber nur für alle Verbindungen.
Das heißt ich kann dann auch nichts mehr machen