sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan får du SQL-tekst fra Postgres hændelsesudløser

Startende fra PostgreSQL 9.5, funktion pg_event_trigger_ddl_commands() er tilgængelig for ddl_command_end hændelsesudløser. Brug af TAG filter, kan det bruges til at behandle enhver ændret tabel. object_identity (eller objid ) kan bruges til at løse det oprindelige problem med at vide, hvilken tabel der er blevet ændret. Hvad angår at få hele kommandoen, er den også tilgængelig, men den er af en intern type pg_ddl_command .

CREATE TABLE t (n INT);

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();

ALTER TABLE t ADD c CHAR;

output:NOTICE: caught ALTER TABLE event on public.t




  1. Vis alle funktioner i Oracle-databasen

  2. Brug af en .php-fil til at generere en MySQL-dump

  3. Kan jeg i MySQL udskyde kontrol af referenceintegritet, indtil commit

  4. Hvad er forskellen mellem RANK() og DENSE_RANK() funktioner i oracle?