sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man får SQL-text från Postgres händelseutlösare

Med start från PostgreSQL 9.5, funktion pg_event_trigger_ddl_commands() är tillgänglig för ddl_command_end händelseutlösare. Använda TAG filter, kan det användas för att bearbeta alla ändrade tabeller. object_identity (eller objid ) kan användas för att lösa det ursprungliga problemet med att veta vilken tabell som har ändrats. När det gäller att få hela kommandot så är det också tillgängligt, men det är av en intern typ 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;

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




  1. Primära nycklar och index i Hive-frågespråk är möjligt eller inte?

  2. Hantera primärnyckelkonflikter vid infogning av data i SQLite

  3. SQL Server rekursiv fråga

  4. Använda Oracle JDeveloper 12c med Oracle Database 12c på Oracle Cloud Platform, del 2