jota.comm escreveu:
> Vamos ao problema: Estou desenvolvmendo uma function para dar permissão
> a um determinado usuário, porém quero fazer um tratamento de exceção
> caso o usuário não exista não gere uma mensagem de erro.
>
> Pensando logicamente minha idéia era usar o error code:
> invalid_role_specification, porém não funcionou e o mesmo não cai no
> tratamento da exceção, a única maneira de resolver foi usando:
> syntax_error_or_access_rule_violation, que para mim não faz muito sentido.
>
O que você precisa é undefined_object. Vale lembrar que
syntax_error_or_access_rule_violation é uma classe de erros, ou seja,
ela retorna verdadeiro para qualquer erro que pertença a sua classe. Se
você quiser ser mais específico evite as classes XX000; ao invés disso,
utilize um código de erro específico. Utilize as variáveis sqlstate e
sqlerrm para descobrir os códigos de erro específicos.
CREATE OR REPLACE FUNCTION foo(text) RETURNS void AS $$
BEGIN
BEGIN
EXECUTE 'GRANT SELECT ON teste TO ' || $1;
EXCEPTION WHEN syntax_error_or_access_rule_violation THEN
RAISE NOTICE 'sqlstate: %; sqlerrm: %', sqlstate, sqlerrm;
END;
END;
$$ language 'plpgsql';
--
Euler Taveira de Oliveira
http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral