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

Responder a