Cada vez que elimines una factura anterior cambiar todos los codigos de las facturas siguientes es mala idea!
Puede utilizar una función propia para generar los codigos de las facturas en lugar de utilizar una sequencia.
Ahora mismo se me ocurre:
Código:
DECLARE
maximo_codigo integer;
siguiente_codigo integer;
BEGIN
select max(n_factura) into maximo_codigo from tabla;
select min(numero) into siguiente_codigo from (
select numero from generate_series(1, maximo_codigo)
except
select codigo_factura from tabla
) foo;
return siguiente_codigo;
Es lo que se me ha venido a la cabeza de primeras, creo que esta bien.
Salu2
PD: Tengo pendiente mirar el tema de tu trigger pero ando un poco liado.