PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać tekst SQL z wyzwalacza zdarzenia Postgres?

Począwszy od PostgreSQL 9.5, funkcja pg_event_trigger_ddl_commands() jest dostępny dla ddl_command_end wyzwalacze zdarzeń. Korzystanie z TAG filtr, może być używany do przetwarzania dowolnej tabeli ALTERed. object_identity (lub objid ) może służyć do rozwiązania pierwotnego problemu polegającego na tym, że tabela została zmieniona. Jeśli chodzi o uzyskanie kompletnego polecenia, jest ono również dostępne, ale jest typu wewnętrznego 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;

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego tylko superużytkownik może CREATE EXTENSION hstore, a nie na Heroku?

  2. Postgres - CREATE TABLE FROM SELECT

  3. Błąd SQLAlchemy nie podano hasła

  4. Jak zmienić ustawienia regionalne podczas formatowania liczb w PostgreSQL?

  5. Jak działa Tanh() w PostgreSQL