Erstellen der Event-Log-Tabelle und der Trigger-Funktion
In diesem Schritt erstellen Sie die Tabelle event_log
und die Funktion log_ddl_event
. Die Tabelle event_log
speichert die Details der Datenbankereignisse, und die Funktion log_ddl_event
wird ausgeführt, wenn ein bestimmtes Ereignis eintritt.
Stellen Sie zunächst als Benutzer postgres
eine Verbindung zur PostgreSQL-Datenbank her:
sudo -u postgres psql
Erstellen Sie nun die Tabelle event_log
, indem Sie den folgenden SQL-Befehl ausführen:
CREATE TABLE event_log (
event_time timestamp without time zone,
event_type text,
schema_name text,
object_name text,
command_tag text
);
Dieser Befehl erstellt eine Tabelle namens event_log
mit Spalten zum Speichern der Ereigniszeit (event_time
), des Ereignistyps (event_type
), des Schemanamens (schema_name
), des Objektnamens (object_name
) und des Befehls-Tags (command_tag
).
Erstellen Sie als Nächstes die Event-Trigger-Funktion log_ddl_event
. Führen Sie den folgenden SQL-Befehl aus:
CREATE OR REPLACE FUNCTION log_ddl_event()
RETURNS event_trigger
AS $$
BEGIN
INSERT INTO event_log (event_time, event_type, schema_name, object_name, command_tag)
VALUES (NOW(), TG_EVENT, TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_TAG);
END;
$$ LANGUAGE plpgsql;
Dieser Befehl erstellt eine Funktion namens log_ddl_event
. Lassen Sie uns aufschlüsseln, was diese Funktion tut:
CREATE OR REPLACE FUNCTION log_ddl_event()
: Erstellt oder ersetzt eine Funktion namens log_ddl_event
.
RETURNS event_trigger
: Gibt an, dass die Funktion eine Event-Trigger-Funktion (Ereignis-Trigger-Funktion) ist.
AS $$ ... $$ LANGUAGE plpgsql
: Definiert den Funktionskörper mit der Sprache plpgsql
.
INSERT INTO event_log ...
: Fügt eine neue Zeile mit den Ereignisdetails in die Tabelle event_log
ein.
NOW()
: Ruft den aktuellen Zeitstempel ab.
TG_EVENT
: Eine spezielle Variable, die den Typ des Ereignisses enthält, das die Funktion ausgelöst hat (z. B. CREATE TABLE
).
TG_TABLE_SCHEMA
: Eine spezielle Variable, die den Schemanamen des Objekts enthält, das die Funktion ausgelöst hat.
TG_TABLE_NAME
: Eine spezielle Variable, die den Namen des Objekts enthält, das die Funktion ausgelöst hat.
TG_TAG
: Eine spezielle Variable, die das Command Tag (Befehls-Tag) des Ereignisses enthält (z. B. CREATE TABLE
).
Nach dem Ausführen der obigen Befehle sollten Sie CREATE TABLE
und CREATE FUNCTION
in der Ausgabe sehen, was darauf hinweist, dass die Tabelle und die Funktion erfolgreich erstellt wurden.