tengo el siguiente codigo trigger en postgres 9.2
    
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION sp_incremental () RETURNS TRIGGER AS 
$BODY$
DECLARE
    ultimocodigo CHARACTER VARYING(100);
    parteTexto CHARACTER VARYING(100);
    parteNumerica CHARACTER VARYING(100);
    longitudNumerica INT;
    codigoNumerico CHARACTER VARYING(100);
    codigo CHARACTER VARYING(100);
BEGIN
    ultimocodigo := (SELECT MAX(codigousuarioamigo) FROM TUsuarioAmigo);
    IF ultimocodigo IS NULL THEN
        ultimocodigo := 'USUARIOX0000000';
    END IF;
    parteTexto := substr(ultimocodigo, 1, 8);
    parteNumerica := substr(ultimocodigo, 9, 7)|| 1 ;
    longitudNumerica := (SELECT LENGTH(parteNumerica)-6);
    codigoNumerico := concat(repeat('0', longitudNumerica), parteNumerica);
    codigo := concat(parteTexto, codigoNumerico);
    NEW.codigoUsuario := (SELECT codigo);
    EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'SQL ERROR: %', SQLERRM;
END
$BODY$ 
LANGUAGE plpgsql;
 
CREATE TRIGGER trggBeforeInsertTUsuario 
BEFORE INSERT ON TUsuario 
FOR EACH ROW
  EXECUTE PROCEDURE sp_incremental();
  
[/CODE]
pero me sale el siguiente error al insertar una nueva fila  
ERROR: la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN
CONTEXT: función PL/pgSQL sp_incremental() 
********** Error ********** 
ERROR: la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN
SQL state: 2F005
Context: función PL/pgSQL sp_incremental()  
llevo varios dias sin poder identificar que RETURN no se encuentra... vale aclarar que postgres no conozco mucho... de hecho este sp lo copie de MySQL
