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


Reply via email to