Questão de Banco de Dados — PostgreSQL — VUNESP 2024
Banco de Dados›PostgreSQL
Código
vu212044
Banca
VUNESP
Órgão
SPTrans
Ano
2024
Cargo
Tec ( )
Considerando o sistema gerenciador de bancos de dados PostgreSQL v. 14.4, o comando FETCH tem como função
Aexcluir o conteúdo de uma tabela.
Brecuperar o espaço de armazenamento previamente ocupado por tuplas excluídas.
Cgerar uma notificação a todos os usuários da base de dados.
Dobter linhas/registros a partir de um cursor.
Eabortar a transação corrente.
Revelar gabarito e comentário▾
GabaritoD — obter linhas/registros a partir de um cursor.
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”.
PostgreSQL: o comando FETCH e o uso de cursores
Gabarito: letra D. No PostgreSQL, o comando FETCH é utilizado para obter linhas/registros a partir de um cursor, avançando o cursor e retornando a linha (ou conjunto de linhas) na posição atual. Os demais comandos citados nas alternativas — DELETE/TRUNCATE, VACUUM, NOTIFY e ROLLBACK — desempenham funções distintas, e a banca explora exatamente essa confusão entre comandos do PostgreSQL.
O FETCH é um comando da linguagem SQL que opera sobre cursores. Um cursor é um ponteiro para uma linha específica dentro do resultado de uma consulta, permitindo processar os dados linha a linha, em vez de obter todo o resultado de uma vez. No PostgreSQL, o FETCH pode ser usado tanto em SQL puro quanto em PL/pgSQL, e sua sintaxe básica é FETCH [direção] FROM nome_do_cursor, onde a direção pode ser NEXT, PRIOR, FIRST, LAST, ABSOLUTE n, RELATIVE n, entre outras. Quando usado sem direção, o padrão é NEXT, que retorna a próxima linha após a posição atual do cursor.
A função do FETCH é essencialmente de leitura: ele recupera dados do cursor e os disponibiliza para o programa que o utiliza. Isso é diferente de outros comandos que modificam o estado do banco, como DELETE (exclui linhas), UPDATE (altera linhas) ou INSERT (adiciona linhas). O FETCH não altera os dados; apenas os lê. Por isso, ele é classificado como um comando de manipulação de dados (DML), mas com a particularidade de operar sobre cursores.
Na prática, o uso típico de um cursor com FETCH ocorre em funções ou procedimentos armazenados, onde é necessário processar um conjunto de resultados linha por linha. Por exemplo, em uma função PL/pgSQL, pode-se declarar um cursor para uma consulta, abri-lo com OPEN, e então usar FETCH NEXT FROM cursor INTO variáveis para obter cada linha e processá-la. O comando MOVE, que é frequentemente confundido com FETCH, também reposiciona o cursor, mas não retorna nenhuma linha — apenas move o ponteiro.
A pegadinha desta questão está em associar o FETCH a comandos que têm nomes ou funções semelhantes, mas que realizam tarefas completamente diferentes. O candidato que não conhece a função exata do FETCH pode facilmente confundi-lo com VACUUM (que recupera espaço de armazenamento) ou com NOTIFY (que envia notificações). A chave para acertar é lembrar que FETCH está diretamente ligado a cursores e à recuperação de linhas a partir deles.
Guarde esta distinção: FETCH = obter linhas de um cursor; MOVE = reposicionar cursor sem retornar linhas; VACUUM = limpar tuplas mortas; NOTIFY = enviar notificação; ROLLBACK = desfazer transação. É exatamente nessa fronteira que as alternativas se dividem.
Comandos PostgreSQL: FETCH (Obtém linhas de um cursor, Direções: NEXT, PRIOR, FIRST, LAST); MOVE (Reposiciona cursor, Não retorna linhas); VACUUM (Recupera espaço de tuplas mortas); NOTIFY (Envia notificação assíncrona); ROLLBACK (Aborta transação corrente)
Alternativa A — ❌ Incorreta
A alternativa afirma que FETCH exclui o conteúdo de uma tabela. Isso é função dos comandos DELETE (exclui linhas específicas) e TRUNCATE (exclui todas as linhas de uma tabela, mantendo a estrutura). O FETCH não tem qualquer relação com exclusão de dados; ele apenas lê linhas de um cursor. A banca troca a função de leitura por uma de exclusão, explorando a confusão entre comandos de manipulação de dados.
Alternativa B — ❌ Incorreta
A alternativa afirma que FETCH recupera o espaço de armazenamento previamente ocupado por tuplas excluídas. Essa é a função do comando VACUUM, que no PostgreSQL remove fisicamente as tuplas mortas (linhas excluídas ou obsoletas por atualizações) e libera o espaço ocupado por elas. O FETCH não tem relação com gerenciamento de armazenamento físico; ele opera no nível lógico, recuperando linhas de um cursor.
Alternativa C — ❌ Incorreta
A alternativa afirma que FETCH gera uma notificação a todos os usuários da base de dados. Essa é a função do comando NOTIFY, que envia uma notificação assíncrona para os clientes que estão escutando um canal específico. O FETCH não tem relação com notificações; ele é um comando de leitura de dados de um cursor.
Alternativa D — ✅ Correta ⟵ GABARITO
A alternativa afirma que FETCH obtém linhas/registros a partir de um cursor. Isso está exatamente correto. O FETCH é o comando que recupera linhas de um cursor no PostgreSQL, avançando o cursor e retornando a linha (ou linhas) na posição atual. É a função central do comando, e a alternativa espelha com precisão o que ele faz.
Alternativa E — ❌ Incorreta
A alternativa afirma que FETCH aborta a transação corrente. Essa é a função do comando ROLLBACK, que desfaz todas as alterações feitas na transação atual e a encerra. O FETCH não tem relação com controle de transações; ele é um comando de leitura de dados de um cursor.
NÃO CAIA NESSA!
A banca adora trocar a função de comandos do PostgreSQL para confundir o candidato. Aqui, ela mistura FETCH com VACUUM (alternativa B), NOTIFY (alternativa C) e ROLLBACK (alternativa E). A chave é lembrar que FETCH está sempre ligado a cursores e à recuperação de linhas — se a alternativa não mencionar cursor, desconfie. Com treino, você enxerga essas trocas de longe 💪
PEGA ESSA DICA!
Para fixar, monte um mapa mental dos comandos do PostgreSQL: FETCH (obter linhas de cursor), MOVE (reposicionar cursor), VACUUM (limpar tuplas mortas), NOTIFY (enviar notificação), ROLLBACK (desfazer transação). Associe cada comando à sua função principal e resolva questões que cobrem esses comandos em pares, como esta.