joaofabioma

Monitor Alteração Estrutura

Jun 7th, 2022 (edited)
1,128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- SCHEMA: dba
  2. --DROP SCHEMA IF EXISTS dba CASCADE;
  3. CREATE SCHEMA IF NOT EXISTS dba
  4.     AUTHORIZATION postgres;
  5.  
  6. -- Table: audit.ddl_history
  7. -- DROP TABLE IF EXISTS dba.ddl_history;
  8. CREATE TABLE IF NOT EXISTS dba.ddl_history
  9. (
  10.    id bigserial,
  11.    xid bigint DEFAULT txid_current(),
  12.    ddl_date timestamp with time zone,
  13.    ddl_tag varchar,
  14.    tipo varchar,
  15.    schema_table varchar,
  16.    extensao BOOLEAN,
  17.    ddl_command TEXT,
  18.     CONSTRAINT ddl_history_pkey PRIMARY KEY (id)
  19. );
  20. ALTER TABLE IF EXISTS audit.ddl_history OWNER to postgres;
  21.  
  22.  
  23. -- FUNCTION: dba.log_ddl()
  24. -- DROP FUNCTION IF EXISTS dba.log_ddl();
  25. CREATE OR REPLACE FUNCTION dba.log_ddl()
  26.     RETURNS event_trigger
  27.     LANGUAGE 'plpgsql'
  28.     COST 100
  29.     VOLATILE NOT LEAKPROOF
  30.     SECUTIY DEFINER
  31. AS $BODY$
  32. DECLARE
  33.   audit_query TEXT;
  34.   vr RECORD;
  35.   vignora TEXT[] = ARRAY['DROP TABLE', 'REFRESH MATERIALIZED VIEW'];
  36. BEGIN
  37.    IF NOT (tg_tag = ANY(vignora)) THEN
  38.       FOR vr IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP
  39.  
  40.          INSERT INTO dba.ddl_history (ddl_date, ddl_tag, tipo, schema_table, extensao, ddl_command) VALUES (statement_timestamp(), tg_tag, vr.object_type, vr.object_identity, vr.in_extension, current_query());
  41.       END LOOP;
  42.    END IF;
  43. END;
  44. $BODY$;
  45. ALTER FUNCTION dba.log_ddl() OWNER TO postgres;
  46.  
  47.    
  48. -- Event Trigger: log_ddl_info on database logs
  49. -- DROP EVENT TRIGGER IF EXISTS log_ddl_info;
  50. CREATE EVENT TRIGGER log_ddl_info ON DDL_COMMAND_END
  51.     EXECUTE PROCEDURE dba.log_ddl();
  52. ALTER EVENT TRIGGER log_ddl_info OWNER TO postgres;
  53.  
  54.  
  55. SELECT * FROM dba.ddl_history
  56.  
  57.  
Add Comment
Please, Sign In to add comment