FC ConcursosFC Concursos

Questão FC373015

O bloqueio em nível de linha ou registro, no PostgreSQL versão 11.x, é obtido automaticamente quando a linha é atualizada ou excluída. Os bloqueios em nível de linha não afetam a c

Sistema de Gerenciamento de Banco de Dados (SGBD)

FCC · 2020

O bloqueio em nível de linha ou registro, no PostgreSQL versão 11.x, é obtido automaticamente quando a linha é atualizada ou excluída. Os bloqueios em nível de linha não afetam a consulta aos dados, já que bloqueiam apenas gravações na mesma linha.

 

Para ‘forçar’ um bloqueio de linha em um comando SELECT, deve-se usar:

  1. WITH LOCK.
  2. EXCLUSIVE.
  3. FOR UPDATE.
  4. NO UPDATE.
  5. LINE LOCK.
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

A opção correta é FOR UPDATE. Ao incluir essa cláusula num SELECT, o PostgreSQL obtém um bloqueio em nível de linha sobre as linhas retornadas, sem precisar modificá‑las.

Esse bloqueio garante que outras transações não possam gravar (atualizar ou excluir) as mesmas linhas enquanto a transação que executou o SELECT estiver ativa. Já leituras simples por outras transações continuam possíveis (ou seja, não bloqueia consultas de leitura).

O bloqueio permanece até o COMMIT ou ROLLBACK da transação; durante esse período, a transação titular pode atualizar a linha repetidas vezes sem risco de conflito.

Exemplo de uso:
SELECT coluna1, coluna2 FROM tabela WHERE condição FOR UPDATE

É a forma padrão de implementar bloqueio pessimista em seções críticas onde se quer evitar concorrência na gravação.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo