Trigger AFTER - Postgres

Preciso pegar um valor que esta em uma outra tabela, para conctenar com a matricula

Ex.: Matricula antiga: 0123456

Matricula nova: sal0123456

Esse sal > vem do municipio "SALvador"

Para pegar o nome do Municipio do campus, fiz uma função, que segue abaixo:

CREATE OR REPLACE FUNCTION matricula_aluno(mat_aluno character varying)

RETURNS character varying AS

$BODY$

DECLARE

municipio character varying(20);

matriculanova character varying(20);

BEGIN

Select into municipio mun."MUN_NOME" From aluno a JOIN curso c

ON a.curs_cod = c.curs_cod

JOIN campus cm

ON c.camp_cod = cm.camp_cod

JOIN municipios mun

ON cm.mun_cod = mun."MUN_COD"

Where alun_matricula = mat_aluno;

select into municipio substring(municipio from 0 for 4);

select into municipio lower(municipio);

matriculanova := municipio||mat_aluno;

return matriculanova;

END;

$BODY$

LANGUAGE plpgsql VOLATILE

COST 100;

ALTER FUNCTION matricula_aluno(character varying) OWNER TO postgres;

Essa função, faz todo um select, que chega ate o MUN_NOME, quando o alun_matricula = parametro passado pela função.

Essa função esta funcionando. Pega as 3 primeiras letras do municipio e conctena com o número de matricula.

Só que, essa função soh funciona se eu colocar a TRIGGER como AFTER. Mas, com a trigger em AFTER, a função não consegue inserir no registro.

O que eu posso fazer?