En este caso te propongo algo que no me gusta mucho, pero que puede funcionarte.
Y es hacer uso de rules.
Es un mecanismo similar a los triggers pero que no afecta cada registro, sino un conjunto de reglas.
Lo que te digo que no me gusta, es hacer un
create replace de la regla cada que haya una inserción u operación DML para poder capturar el usuario que dices es el parametro.
Te lo muestro en este ejemplo:
Código SQL:
Ver originalpruebas=> CREATE TABLE yoelvis(id INTEGER);
CREATE TABLE
pruebas=> CREATE TABLE yoelvis_auditoria(fecha DATE,id INTEGER);
CREATE TABLE
pruebas=> CREATE OR REPLACE RULE yoelvis_insert AS ON INSERT TO yoelvis DO INSERT INTO yoelvis_audit
oria VALUES(TO_DATE('1984-11-12','YYYY-MM-DD'),NEW.id);
CREATE RULE
pruebas=> INSERT INTO yoelvis VALUES(1);
INSERT 0 1
pruebas=> INSERT INTO yoelvis VALUES(2);
INSERT 0 1
pruebas=> SELECT *FROM yoelvis_auditoria;
fecha | id
------------+----
1984-11-12 | 1
1984-11-12 | 2
(2 filas)
pruebas=> CREATE OR REPLACE RULE yoelvis_insert AS ON INSERT TO yoelvis DO INSERT INTO yoelvis_audit
oria VALUES(TO_DATE('1984-11-13','YYYY-MM-DD'),NEW.id);
CREATE RULE
pruebas=> INSERT INTO yoelvis VALUES(1);
INSERT 0 1
pruebas=> SELECT *FROM yoelvis_auditoria;
fecha | id
------------+----
1984-11-12 | 1
1984-11-12 | 2
1984-11-13 | 1
(3 filas)
En este caso, la fecha se comporta como el parámetro de entrada (Que en tu caso sería el usuario) pero ara que sea dinámico, requiere ejecutar el
CREATE OR REPLACE RULE desde el lenguaje para que inserte el valor que se espera.
Yo realmente optaría por añadir a cada tabla original un campo para almacenar el user y pasarselo como valor NEW u OLD al trigger y que haga la operación DML automática.
EDITO: se me adelantó calakra