Considere que um Analista está trabalhando em um banco de dados PostgreSQL aberto e funcionando em condições ideais. O Analista inseriu a seguinte sequência de comandos:
Ahaverá erro, pois não é possível fazer inserção de múltiplas linhas em tabelas do PostgreSQL.
Bhaverá erro devido ao fato de as 3 linhas a serem inseridas na tabela TRTContatos não terem os 4 campos informados em CREATE TABLE.
CI deve ser preenchido com IF EXISTS e II deve ser preenchido com RETURNING * para que as linhas inseridas sejam apresentadas.
DI deve ser preenchido com ALL ROWS e II deve ficar sem nenhum preenchimento.
Efaltou um _ entre cod e serial, pois o certo seria cod_serial PRIMARY KEY.
Revelar gabarito e comentário▾
GabaritoC — I deve ser preenchido com IF EXISTS e II deve ser preenchido com RETURNING * para que as linhas inseridas sejam apresentadas.
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: Comandos DDL e DML (DROP, CREATE, INSERT) com RETURNING
Gabarito: letra C. A sintaxe correta no PostgreSQL exige a cláusula IF EXISTS no DROP TABLE para evitar erro caso a tabela não exista, e a cláusula RETURNING * no INSERT para recuperar as linhas inseridas após sua execução.
A questão testa o conhecimento de sintaxes específicas do PostgreSQL: DROP TABLE IF EXISTS e INSERT ... RETURNING. A sequência de comandos do enunciado deve ser completada de forma que não ocorra erro e que as linhas inseridas sejam apresentadas.
Comando
Cláusula I (DROP TABLE)
Cláusula II (INSERT)
Efeito
DROP TABLE
IF EXISTS
—
Evita erro se a tabela não existir
INSERT
—
RETURNING *
Exibe as linhas recém-inseridas
Alternativa A — ❌ Incorreta
Afirma que não é possível inserir múltiplas linhas no PostgreSQL. Na verdade, o PostgreSQL permite inserir várias linhas com uma única instrução INSERT, separando os conjuntos de valores por vírgula. O comando mostrado é perfeitamente válido.
Alternativa B — ❌ Incorreta
Afirma que haverá erro porque as 3 linhas não têm os 4 campos definidos no CREATE TABLE. No entanto, o INSERT especifica apenas as colunas orgao e email; as demais colunas (cod, que é serial e gera automaticamente, e descricao, que aceita NULL) não precisam ser fornecidas. O comando é válido.
Alternativa C — ✅ Correta ⟵ GABARITO
Preenche I com IF EXISTS e II com RETURNING *. DROP TABLE IF EXISTS é a forma segura de evitar erro se a tabela não existir. INSERT ... RETURNING * exibe as linhas recém-inseridas, conforme solicitado no enunciado ("as linhas inseridas sejam apresentadas").
Alternativa D — ❌ Incorreta
ALL ROWS não é uma cláusula válida para o comando DROP TABLE no PostgreSQL. Para apresentar as linhas inseridas, é necessário usar RETURNING; deixar II vazio não as apresentaria.
Alternativa E — ❌ Incorreta
cod serial PRIMARY KEY é a sintaxe correta: cod é o nome da coluna, serial é o tipo de dado (um atalho para integer com auto-incremento), e PRIMARY KEY é a restrição. Não falta underscore. A sugestão cod_serial seria um nome de coluna, não um tipo.
PEGA ESSA DICA!
No PostgreSQL, lembre-se de que o INSERT pode ser seguido de RETURNING para obter os valores inseridos (similar ao OUTPUT do SQL Server). Além disso, o DROP TABLE IF EXISTS evita erros em scripts reexecutáveis.