Questão de Banco de Dados — PostgreSQL — INSTITUTO AOCP 2025
Banco de Dados›PostgreSQL
Código
qg543485
Banca
INSTITUTO AOCP
Órgão
TRE-TO
Ano
2025
Nível
Superior
Cargo
Analista Judiciário - Área de Atividade: Apoio Especializado - Especialidade: Tecnologia da Informação
Dentro do banco de dados PostgreSQL, qual é o nome que caracteriza uma função que não tem efeitos colaterais, ou seja, uma função que não revela nenhuma informação sobre seus argumentos além do seu valor de retorno?
ALEAKPROOF.
BVOLATILE.
CIMMUTABLE.
DSTABLE.
ETRANSFORM.
Revelar gabarito e comentário▾
GabaritoA — LEAKPROOF.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Funções no PostgreSQL: categorias de volatilidade
Gabarito: letra A. A função que não tem efeitos colaterais e não revela informações sobre seus argumentos além do valor de retorno é a LEAKPROOF. Essa classificação é definida na documentação oficial do PostgreSQL, que descreve as categorias de volatilidade das funções (VOLATILE, STABLE, IMMUTABLE) e a propriedade LEAKPROOF, que garante que a função não vaza dados por meio de mensagens de erro ou outros canais.
No PostgreSQL, toda função criada pelo usuário pode ser classificada quanto à sua volatilidade, que informa ao otimizador de consultas o quão previsível é o seu resultado. As três categorias principais são:
VOLATILE: a função pode retornar resultados diferentes a cada chamada, mesmo com os mesmos argumentos, e pode ter efeitos colaterais (como modificar o banco). É o padrão para funções que não são declaradas de outra forma.
STABLE: a função retorna o mesmo resultado para os mesmos argumentos dentro de uma única instrução SQL, mas pode variar entre instruções diferentes. Não pode modificar o banco de dados.
IMMUTABLE: a função retorna sempre o mesmo resultado para os mesmos argumentos, independentemente do contexto. Não pode modificar o banco de dados e é a mais restritiva.
Além dessas, existe a propriedade LEAKPROOF, que é independente da volatilidade. Uma função LEAKPROOF é aquela que não revela nenhuma informação sobre seus argumentos além do valor de retorno. Isso significa que ela não pode gerar mensagens de erro que contenham dados dos argumentos, nem pode ter efeitos colaterais observáveis. Essa propriedade é usada pelo otimizador para aplicar otimizações que envolvem a reordenação de operações, como em consultas com filtros de segurança.
Na prática, uma função LEAKPROOF é útil em contextos de segurança, como em políticas de segurança de linha (RLS), onde o otimizador pode reordenar a aplicação de filtros sem risco de vazar informações. Por exemplo, se uma função é usada em uma condição WHERE e é LEAKPROOF, o PostgreSQL pode avaliá-la antes de outras condições, sem se preocupar com vazamento de dados.
A pegadinha desta questão está em confundir LEAKPROOF com IMMUTABLE. Enquanto IMMUTABLE garante que o resultado é sempre o mesmo para os mesmos argumentos, LEAKPROOF garante que a função não vaza informações sobre os argumentos. Uma função pode ser IMMUTABLE e não ser LEAKPROOF (se, por exemplo, lançar uma exceção que inclua o valor do argumento na mensagem de erro). Portanto, a definição dada no enunciado se encaixa exatamente em LEAKPROOF.
Guarde essa distinção: volatilidade (VOLATILE, STABLE, IMMUTABLE) diz respeito à previsibilidade do resultado; LEAKPROOF diz respeito à segurança da informação. É nessa fronteira que as alternativas se dividem.
Funções no PostgreSQL
1Volatilidade (previsibilidade do resultado)
VOLATILE
Resultado varia a cada chamada
Pode ter efeitos colaterais
STABLE
Mesmo resultado na mesma instrução
Pode variar entre instruções
IMMUTABLE
Sempre o mesmo resultado
Não modifica o banco
2Segurança da informação
LEAKPROOF
Não revela info dos argumentos
Sem efeitos colaterais observáveis
Usado em RLS (segurança de linha)
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
A definição do enunciado — "função que não tem efeitos colaterais, ou seja, que não revela nenhuma informação sobre seus argumentos além do seu valor de retorno" — corresponde exatamente à propriedade LEAKPROOF no PostgreSQL. Essa propriedade é declarada na criação da função (ex.: CREATE FUNCTION ... LEAKPROOF) e garante que a função não vaze dados por meio de mensagens de erro ou outros canais.
Alternativa B — ❌ Incorreta
VOLATILE é uma categoria de volatilidade que indica que a função pode retornar resultados diferentes a cada chamada, mesmo com os mesmos argumentos, e pode ter efeitos colaterais (como modificar o banco). Isso é o oposto da definição dada, que exige ausência de efeitos colaterais e não revelação de informações.
Alternativa C — ❌ Incorreta
IMMUTABLE indica que a função retorna sempre o mesmo resultado para os mesmos argumentos, mas não diz nada sobre a não revelação de informações. Uma função IMMUTABLE pode, por exemplo, lançar uma exceção que inclua o valor do argumento na mensagem de erro, o que violaria a propriedade LEAKPROOF. Portanto, IMMUTABLE não é a resposta.
Alternativa D — ❌ Incorreta
STABLE indica que a função retorna o mesmo resultado para os mesmos argumentos dentro de uma única instrução SQL, mas pode variar entre instruções. Assim como IMMUTABLE, não garante a não revelação de informações sobre os argumentos.
Alternativa E — ❌ Incorreta
TRANSFORM não é uma categoria de volatilidade nem uma propriedade de função no PostgreSQL. O termo "transform" pode se referir a transformações de tipo (type transforms), mas não tem relação com a definição dada.