Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — VUNESP 2024

Banco de DadosPostgreSQL
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
  1. Aexcluir o conteúdo de uma tabela.
  2. Brecuperar o espaço de armazenamento previamente ocupado por tuplas excluídas.
  3. Cgerar uma notificação a todos os usuários da base de dados.
  4. Dobter linhas/registros a partir de um cursor.
  5. 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.

1FETCH
Obtém linhas de um cursor
Direções: NEXT, PRIOR, FIRST, LAST
2MOVE
Reposiciona cursor
Não retorna linhas
3VACUUM
Recupera espaço de tuplas mortas
4NOTIFY
Envia notificação assíncrona
5ROLLBACK
Aborta transação corrente
Comandos PostgreSQL
LEVELsoulevel.com.br
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.

Gabarito: letra D

Link permanente: /questoes/vu212044