Questão de Banco de Dados — PostgreSQL — FCC 2024
- Código
- fc147228
- Banca
- FCC
- Órgão
- SEAD PI
- Ano
- 2024
- Cargo
- Ana Gov ( )
- AON CONFLICT
- BON EQUAL
- CWHEN CONFLICT
- DON MATCHED
- EWHEN MATCHED
GabaritoA — ON CONFLICT
Gabarito: letra A. No PostgreSQL, a cláusula ON CONFLICT é usada no comando INSERT para definir uma ação alternativa (como DO NOTHING ou DO UPDATE SET) quando um registro proposto viola uma restrição de unicidade ou exclusão. As demais alternativas não existem na sintaxe do PostgreSQL.
O INSERT no PostgreSQL permite especificar um comportamento quando há conflito com uma restrição de unicidade (chave primária, restrição UNIQUE ou EXCLUDE). A sintaxe básica é:
INSERT INTO tabela (colunas) VALUES (valores)
ON CONFLICT (coluna_conflito) DO NOTHING;
-- ou
ON CONFLICT (coluna_conflito) DO UPDATE SET coluna = valor;A cláusula ON CONFLICT pode ser usada de duas formas principais:
ON CONFLICT DO NOTHING: ignora a inserção se houver conflito, sem gerar erro.
ON CONFLICT (coluna) DO UPDATE SET ...: atualiza a linha existente com os novos valores (também conhecido como upsert).
É possível especificar a coluna ou a restrição que deve ser verificada, ou omitir a lista para que qualquer conflito seja tratado.
A banca explora aqui o conhecimento da sintaxe específica do PostgreSQL. As alternativas ON EQUAL, WHEN CONFLICT, ON MATCHED e WHEN MATCHED não fazem parte da linguagem SQL do PostgreSQL. WHEN MATCHED e ON MATCHED lembram o MERGE do SQL Server/Oracle, mas não são usadas no PostgreSQL para esse fim.
A cláusula ON CONFLICT é exatamente o mecanismo do PostgreSQL para tratar violações de unicidade durante um INSERT. Ela permite definir a ação alternativa (DO NOTHING ou DO UPDATE SET), conforme descrito acima.
ON EQUAL não existe na sintaxe do PostgreSQL. Não há nenhuma cláusula com esse nome para tratar conflitos de unicidade.
WHEN CONFLICT não é uma cláusula válida no PostgreSQL. A palavra-chave correta é ON CONFLICT, não WHEN CONFLICT.
ON MATCHED não existe no PostgreSQL. Essa expressão lembra o MERGE de outros SGBDs, mas não é utilizada no PostgreSQL para essa finalidade.
WHEN MATCHED também não é uma cláusula do PostgreSQL. É uma construção típica do MERGE do SQL Server/Oracle, mas não se aplica ao comando INSERT do PostgreSQL.
Gabarito: letra A
Link permanente: /questoes/fc147228