Eu tentei isso:
create or replace function c3 (arg char(3))
returns void
language plpgsql as
$$
begin
raise notice 'Value: %', arg;
end;
$$;
Mas aceita mais de três caracteres:
select c3('1234');
Eu tentei isso:
create or replace function c3 (arg char(3))
returns void
language plpgsql as
$$
begin
raise notice 'Value: %', arg;
end;
$$;
Mas aceita mais de três caracteres:
select c3('1234');
Modificadores de tipo de dados em parâmetros de função (como em
char(3)
) são ignorados porCREATE FUNCTION
. O manual:Você ainda pode trabalhar com sua função original, adicionando uma conversão explícita na chamada:
Mas isso é apenas passar batom num porco.
Solução adequada
Adicione um teste explícito:
Ou lance ou trunque silenciosamente a entrada para evitar a exceção:
E nunca use o tipo de dados legado
char(N)
(mesmo que esse não seja o problema imediato aqui). Ver: