Estoy tratando de hacer una especie de mini fórmula para que se guarden los registros de mi BD, no está completado, por lo que falta algunas cosas (como el usuario, la IP de dónde se conecta)
Tabla para guardar unos nombre cualesquiera:
Código:
  
Tabla para guardar los cambios (léase auditoria):CREATE TABLE nombres (
    nombres_id serial NOT NULL,
    nombre1 character varying(20),
    nombre2 character varying(20)
);
Código:
  
Función para obtener el nombre del primer campo de una tabla (el nombre puede variar, pero se sabe que es el primer campo):CREATE TABLE control (
    tabla character varying NOT NULL,
    campo character varying NOT NULL,
    valor_anterior character varying,
    valor_nuevo character varying,
    opcion character varying NOT NULL,
    ocurrencia time without time zone NOT NULL
);
Código:
  
Función disparadora que almacena en la tabla control:CREATE FUNCTION captura(character varying) RETURNS character varying
    AS $_$SELECT column_name FROM information_schema.columns WHERE table_name = $1 AND ordinal_position = 1;$_$
    LANGUAGE sql;
Código:
  
Ahora bien, sí en la cónsola ejecuto:CREATE FUNCTION controlador() RETURNS "trigger"
    AS $$DECLARE
  nombre_campo character varying;
BEGIN
        
  nombre_campo := captura('TG_RELNAME');
  IF (TG_OP = 'DELETE') THEN
	
    INSERT INTO control (tabla, campo, valor_nuevo, opcion, ocurrencia) VALUES (TG_RELNAME, 'nombre_campo', NEW.nombre_campo, TG_OP, now());
    RETURN OLD;
  ELSIF ((TG_OP = 'UPDATE')  OR (TG_OP = 'INSERT')) THEN
    INSERT INTO control (tabla, campo, valor_nuevo, opcion, ocurrencia) VALUES (TG_RELNAME, 'nombre_campo', NEW.nombres_id, TG_OP, now());
    RETURN NEW;
    END IF;
END;
	$$
    LANGUAGE plpgsql;
Código:
  
se observa que funciona. Pero sí, ejecuto un insert sobre la tabla de prueba nombres:pruebas=# SELECT captura('nombres');
  captura
------------
 nombres_id
(1 fila)
Código:
  
cuando hago una consulta sobre la tabla control, obtengo:insert into nombres (nombre1, nombre2) values ('cccc','dddd');
Código:
  
donde se observa que el nombre del primer campo de la tabla, no se está guardando correctamente.pruebas=# SELECT * FROM control ; tabla | campo | valor_anterior | valor_nuevo | opcion | ocurrencia ---------+--------------+----------------+-------------+--------+----------------- nombres | nombre_campo | | 27 | INSERT | 17:25:07.398235 (3 filas)
alguna luz? de antemano, gracias
 
 la felicidad (de padre) de sentirse orgulloso 

