Hola...
creo que la concatenación no la puedes hacer entre dos numeros... para ello deberás primero convertir el numero en cadena, concatenar y luego volverlo a numero para asignarlo al campo "codigo".
he hecho esta función de ejemplo y me esta trabajando bien:
Código SQL
[-]
CREATE OR REPLACE FUNCTION public.test_concat() RETURNS NUMERIC AS $$
DECLARE
_yr NUMERIC (4,0);
_nxtval NUMERIC;
_str VARCHAR;
BEGIN
SELECT EXTRACT(YEAR FROM CURRENT_DATE) INTO _yr;
SELECT nextval('sequence1') INTO _nxtval;
_str := _yr::VARCHAR || _nxtval::VARCHAR;
RETURN _str::NUMERIC;
END;
$$ LANGUAGE PLPGSQL;
para el trigger que muestras creo que así podria servirte:
Código SQL
[-]
CREATE OR REPLACE FUNCTION sideconc."TRG_SEQ_ALUM"()
RETURNS trigger AS
$BODY$
DECLARE
var NUMERIC (4,0);
BEGIN
SELECT EXTRACT(YEAR FROM CURRENT_DATE)into var;
NEW.codigo := (var::VARCHAR || nextval('sideconc.seq_cod_alum')::VARCHAR)::NUMERIC;
Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION sideconc."TRG_SEQ_ALUM"() OWNER TO postgres;
Saludos,