El 22/02/2022 a las 17:05, Jaime Casanova escribió:
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

Gracias Jaime,

Como comente , current_query  lo ejecuto dentro de un a función que es llamada por un trigger, es por eso por lo que lo que quiero es saber si hay alguna instrucción que me devuelva la sentencia que activo el trigger

Un Saludo








Reply via email to