Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

ayuda con log

Estas en el tema de ayuda con log en el foro de PostgreSQL en Foros del Web. Buenas a todos le cuento que realize un trigger que se ejecuta cuando se reliza algun insert/update/delete en una tabla, registrando la informacion del log ...
  #1 (permalink)  
Antiguo 06/08/2009, 13:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 17 años, 1 mes
Puntos: 4
ayuda con log

Buenas a todos le cuento que realize un trigger que se ejecuta cuando se reliza algun insert/update/delete en una tabla, registrando la informacion del log en la tabla bitacora, pero nose como puedo hacer para obtener el usuario que esta conectado en el sistema

ak dejo mi trigger

Código PHP:
reate or replace function log_productos()
returns trigger
as
$_$
declare
nombre varchar(30);
estado varchar(30);
begin
    
if(TG_OP 'INSERT'then
        nombre
=new.x_nombre_p;
        
insert into bitacora kn_id_bitacorakx_usernamex_tabla_afectadax_accionh_horad_fechax_descripcion)
        
values (nextval('bitacora_kn_id_bitacora_seq'::regclass),'admin''Productos','Inserta',CURRENT_TIME ,current_date,'Se Inserto nuevo producto: ' ||nombre);
        
end if;
    if(
TG_OP='DELETE')then
        insert into bitacora 
kn_id_bitacorakx_usernamex_tabla_afectadax_accionh_horad_fechax_descripcion)
        
values (nextval('bitacora_kn_id_bitacora_seq'::regclass),'admin''Productos','Elimina',CURRENT_TIME ,current_date,'Se Elimino producto: ' ||old.x_nombre_p);
        
end if;
    if(
TG_OP='UPDATE')then
        nombre
=old.x_nombre_p;
        
estado= new.x_estado_p;
        if(
estado 'Eliminado')then
            insert into bitacora 
kn_id_bitacorakx_usernamex_tabla_afectadax_accionh_horad_fechax_descripcion)
            
values (nextval('bitacora_kn_id_bitacora_seq'::regclass),'admin''Productos','Elimina',CURRENT_TIME ,current_date,'Se Elimino Producto: '||nombre);
            
end if;
        if(
estado 'Libre')then
            insert into bitacora 
kn_id_bitacorakx_usernamex_tabla_afectadax_accionh_horad_fechax_descripcion)
            
values (nextval('bitacora_kn_id_bitacora_seq'::regclass),'admin''Productos','Actualiza',CURRENT_TIME ,current_date,'Se Actualizo Producto: '||nombre);
            
end if;
        
end if;
return 
null;
end;
$_language 'plpgsql'
de antemano gracias
  #2 (permalink)  
Antiguo 06/08/2009, 16:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: ayuda con log

segun te entiendo necesitas current_user.

Código sql:
Ver original
  1. SELECT CURRENT_USER;

Te devuelve el usuario conectado al sistema
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 06/08/2009, 22:07
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: ayuda con log

parece que me explique mal, quiero obtener el usuario que utilizo para ingresar a mi sistema, hehco en php, tengo una tabla usuario, cuando ingreso al sistema me logeo con un usuario almacenado en esa tabla, ese es el usuario qe quiero, existe alguna forma de obtenerlo???
  #4 (permalink)  
Antiguo 07/08/2009, 12:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: ayuda con log

Mira el uso de variables record en este post.
Debes hacer una consulta sobre la tabla y asignarla a la variable record. Después puedes usarla como parámetro de entrada del insert.

saludos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 21/08/2009, 15:34
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: ayuda con log

no me resulta, podrias decirme en que estoy fallando
Código PHP:
create or replace function log_productos()
returns trigger
as
$_$
declare
nombre varchar(30);
estado varchar(30);
user record;
begin

    select into user kx_username from usuario where x_estado_user
'Conectado';
    if(
TG_OP 'INSERT'then
        nombre
=new.x_nombre_p;
        
insert into bitacora kn_id_bitacorakx_usernamex_tabla_afectadax_accionh_horad_fechax_descripcion)
        
values (nextval('bitacora_kn_id_bitacora_seq'::regclass),user'Productos','Inserta',CURRENT_TIME ,current_date,'Se Inserto nuevo producto: ' ||nombre);
        
end if; 

gracias
  #6 (permalink)  
Antiguo 21/08/2009, 15:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: ayuda con log

Cita:
values (nextval('bitacora_kn_id_bitacora_seq'::regclass), user, 'Productos'
esto cambialo por esto:

values (nextval('bitacora_kn_id_bitacora_seq'::regclass), user.kx_username, 'Productos'

Te recomiendo no uses palabras reservadas como variables (user)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 23/08/2009, 22:02
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: ayuda con log

ok, muchas gracias ;)
  #8 (permalink)  
Antiguo 26/08/2009, 07:17
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: ayuda con log

Saludos

Cita:
Iniciado por oscar2h Ver Mensaje
parece que me explique mal, quiero obtener el usuario que utilizo para ingresar a mi sistema, hehco en php, tengo una tabla usuario, cuando ingreso al sistema me logeo con un usuario almacenado en esa tabla, ese es el usuario qe quiero, existe alguna forma de obtenerlo???
No se puede. Tienes que hacerte algo del lado del sistema para que le pase al trigger.

Vale decir que no he leido todo el post, ni revisado en detalle los aportes. Sí me equivoco, por favor acepten mis disculpas...
__________________
Gracias de todas todas
-----
Linux!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:53.