Tipp: 113
Bereich: TRIGGER
Versionsinfo: 12.1, 12.2
Erstelldatum: 10.12.2019
Letzte Überarbeitung: 10.12.2019
Nicht nur Oracle besitzt DDL Trigger, diese gibt es auch in ähnlicher Form in der Postgres Datenbank
Folgende Events stehen derzeit zur Verfügung:
- ddl_command_start (zündet vor Ausführung von ( CREATE, ALTER, DROP, SECURITY LABEL, COMMENT, GRANT oder REVOKE Befehlen)
- ddl_command_end (zündet nach Ausführung von ( CREATE, ALTER, DROP, SECURITY LABEL, COMMENT, GRANT oder REVOKE Befehlen)
- sql_drop (zündet bei allen Befehlen, die Objekte aus der Datenbank löschen)
- table_rewrite (zündet vor rewrite Operationen wie ALTER TABLE oder ALTER TYPE)
Beispiel für einen ddl_command_end Trigger:
CREATE FUNCTION notice_event() RETURNS event_trigger AS $$
DECLARE r RECORD;
BEGIN
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP
RAISE NOTICE 'caught % event on %', r.command_tag, r.object_identity;
END LOOP;
END;
$$
LANGUAGE plpgsql;
CREATE EVENT TRIGGER tr_notice_alter_table
ON ddl_command_end WHEN TAG IN ('ALTER TABLE')
EXECUTE PROCEDURE notice_event();
Beispiel für einen sql_drop Trigger in Postgres:
CREATE EVENT TRIGGER tr_notice_drop_table ON SQL_DROP
WHEN TAG IN ('DROP TABLE')
EXECUTE PROCEDURE public.notice_drop_event();
CREATE OR REPLACE FUNCTION notice_drop_event() RETURNS event_trigger AS $$
DECLARE r RECORD;
BEGIN
FOR r IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP
RAISE NOTICE 'Schema:% Objekt:% Typ:% Original:%',
r.schema_name,r.object_name,r.object_type,r.original;
END LOOP;
END;
$$
LANGUAGE plpgsql;
create table t (id int);
drop table t;
HINWEIS: Schema:public Objekt:t Typ:table Original:t
HINWEIS: Schema:public Objekt:t Typ:type Original:f
HINWEIS: Schema:public Objekt:_t Typ:type Original:f
DROP TABLE
Mögliche Return-Spalten der Funktion pg_event_trigger_dropped_objects():
- classid (oid)
- objid (oid)
- objsubid (oid)
- original (boolean) War es das Originalziel des Drop
- normal (boolean)
- is_temporary (boolean) War es ein temporäres Objekt
- object_type (text) Objekttyp wie z.B. Tabelle, Index, Schema
- schema_name (text) Schemaname
- object_name (text) Objektname
- object_identity (text)
- address_names (text[])
- address_args (text[])
Event Matrix für
Postgres 12
Weitere spannende Postgres Beispiele erfahren Sie in unseren PG/SQL Kurs.