Wie erstelle ich einen Trigger für alle Tabellen in postgresql?

8

Ich habe einen Auslöser, aber ich muss mit allen Tabellen meiner Postgres verbinden. Gibt es einen solchen Befehl unten?

%Vor%     
Eduardo Rafael Correa de Souza 16.04.2015, 12:54
quelle

1 Antwort

8

Nun, es gibt keine datenbankweite Triggererstellung, aber für alle solchen Massenadministrationsoperationen könnten Sie PostgreSQL-Systemtabellen verwenden, um Abfragen für Sie zu generieren, anstatt sie manuell zu schreiben. In diesem Fall könnten Sie Folgendes ausführen:

%Vor%

Damit erhalten Sie eine Reihe von Strings, die SQL-Befehle sind wie:

%Vor%

Sie müssen sie nur einmal ausführen (entweder durch psql oder pgAdmin).

Jetzt eine Erklärung:

  • Ich wähle die Namen der Tabellen in meiner Datenbank mit information_schema.tables system table aus. Da Daten von buchstäblich allen Tabellen vorhanden sind, denken Sie daran, pg_catalog und information_schema schemas und Toast-Tabellen von Ihrem select auszuschließen.
  • Ich benutze quote_ident(text) function, die den String bei Bedarf in doppelte Anführungszeichen ( "" ) setzt (dh Namen mit Leerzeichen oder Großbuchstaben erfordern das).
  • Wenn ich eine Liste mit Tabellennamen habe, verknüpfe ich sie einfach mit einigen statischen Strings, um meine SQL-Befehle zu erhalten.
  • Ich schreibe diesen Befehl mit einer Unterabfrage, weil ich möchte, dass Sie eine bessere Vorstellung davon bekommen, was hier vor sich geht. Sie können eine einzelne Abfrage schreiben, indem Sie quote_ident(table_schema) || '.' || quote_ident(table_name) anstelle von tab_name .
  • setzen
Gabriel's Messanger 21.10.2015 18:49
quelle

Tags und Links