postgresql - Cómo obtener texto SQL del evento de Postgres.
triggers plpgsql (1)
A partir de PostgreSQL 9.5, la función pg_event_trigger_ddl_commands()
está disponible para los ddl_command_end
eventos ddl_command_end
. Usando el filtro TAG
, se puede usar para procesar cualquier tabla ALTERada. object_identity
(u objid
) se puede usar para resolver el problema original de saber qué tabla se ALTERÓ. En cuanto a obtener el comando completo, también está disponible, pero es de un tipo interno 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;
salidas: NOTICE: caught ALTER TABLE event on public.t
En un evento pgsql activado en la etiqueta ALTER TABLE, deseo saber qué tabla está siendo alterada.
Las variables pg no cubren esto, ni las variables expuestas por GET STACKED DIAGNOSTICS.
Con las variables disponibles, ¿hay alguna forma dentro de la función de activación para ver el texto del comando SQL responsable de iniciar la función?
por ejemplo, si
ALTER TABLE base1 ADD COLUMN col1 int;
fueron responsables de llamar al activador de eventos, ¿hay alguna forma dentro del activador de eventos para ver ALTER TABLE base1 ADD COLUMN col1 int
text?