On Tue, Feb 22, 2022 at 10:55:16AM +0100, kernel wrote: > Hola, > > Estoy utilizando un sistema de auditoria a base de triggrers, en cada tabla > tengo un triggers que llama a una función, en esta funcion utilizo la > funcion current_query(). > > Hasta aquí todo bien, el problema es que cuando ejecuto varias instrucciones > a la vez (desde pgadmin ) me trata todas las instrucciones como una sola > > ¿Hay alguna otra función que me devuelva la instrucción que activa el > trigger? > > > Ejemplo desde pgadmin: > > > select * from clientes; > > select * from productos; > > update precios set precio = 0 where familia = 'XX' -- en esta tabla esta > el trigger > > > Actualmente la función current_query() me devuelve esto : select * from > clientes;select * from productos;update precios set precio = 0 where > familia = 'XX' >
Las 3 consultas están en la misma ventana de pgAdmin? te aseguraste de marcar (señalar, seleccionar) el update antes? supongo que no porque no tiene ningún sentido ejecutar current_query() de ese modo. verás current_query() devuelve la consulta que se esté ejecutando en ese momento y si seleccionas current_query() y la ejecutas te devolverá: <sonido de tambores> "select current_query()". como no marcaste ninguna sentencia, en ese caso pgAdmin ejecuta todas las sentencias que están en esa ventana, pero se envían como una consulta multi-sentencia. Es decir, lo que estás viendo: "select consulta1; select consulta2; update...". el uso de current_query() tiene sentido dentro de funciones almacenadas y, quizá aunque no lo he probado en ejecución asincrónica de sentencias (https://www.postgresql.org/docs/14/libpq-async.html). Un ejemplo del uso de current_query() que buscas lo puedes encontrar aquí: https://github.com/2ndQuadrant/audit-trigger -- Jaime Casanova Director de Servicios Profesionales SystemGuards - Consultores de PostgreSQL