PostgreSQL: Comandos SQL para backup de estrutura e dados limitados
Gabarito: letra A. A alternativa A utiliza CREATE TABLE backup_cliente AS SELECT * FROM cliente LIMIT 0 para criar uma tabela com a mesma estrutura (colunas) da tabela cliente, mas sem nenhuma linha – exatamente o que se pede: "cópia dos nomes das colunas (sem os dados)". Em seguida, INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3 insere os três primeiros registros. As demais opções contêm erros de sintaxe ou de lógica.
Alternativa | Comando 1 (Criar backup da estrutura) | Comando 2 (Inserir 3 registros) | Correto? | Motivo |
|---|
A | CREATE TABLE backup_cliente AS SELECT * FROM cliente LIMIT 0
| INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3
| ✅ Sim | Cria tabela vazia com mesma estrutura; insere 3 primeiras linhas. |
B | CREATE TABLE backup_cliente AS SELECT * FROM cliente
| INSERT INTO backup_cliente SELECT * FROM cliente WHERE COUNT(*)<=3
| ❌ Não | Cria cópia completa (com dados); WHERE COUNT(*) é inválido. |
C | TRUNCATE TABLE cliente TO backup_cliente
| INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3
| ❌ Não | TRUNCATE ... TO não existe no PostgreSQL.
|
D | CREATE TABLE backup_cliente AS SELECT * FROM cliente
| INSERT INTO backup_cliente SELECT LIMIT 3 FROM cliente
| ❌ Não | Cria cópia completa; SELECT LIMIT 3 sem colunas é inválido. |
E | BACKUP TABLE cliente to backup_cliente
| INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3
| ❌ Não | BACKUP TABLE não é comando SQL padrão do PostgreSQL.
|
Alternativa A — ✅ Correta ⟵ GABARITO
Como explicado, a combinação CREATE TABLE ... AS SELECT ... LIMIT 0 e INSERT ... SELECT ... LIMIT 3 cumpre integralmente os dois requisitos: copiar a estrutura (criação sem dados) e inserir exatamente as 3 primeiras linhas. Embora o identificador "backup cliente" (com espaço) seja inválido em SQL sem aspas duplas, a banca considerou a alternativa correta – provavelmente o nome correto seria backup_cliente ou a sintaxe foi interpretada como válida para o contexto.
Alternativa B — ❌ Incorreta
O comando CREATE TABLE backup_cliente AS SELECT * FROM cliente cria uma cópia completa (estrutura e todos os dados) da tabela original, o que não atende à primeira parte do objetivo (apenas estrutura). Além disso, o INSERT tenta usar a cláusula WHERE COUNT(*)<=3, o que é inválido: COUNT(*) é uma função de agregação e não pode ser usada em WHERE diretamente.
Alternativa C — ❌ Incorreta
TRUNCATE TABLE cliente TO backup_cliente não é válido em PostgreSQL. O comando TRUNCATE remove todas as linhas de uma tabela, mas não possui cláusula TO e não cria uma nova tabela. A tarefa exige criar uma tabela separada e inserir dados, não truncar a original.
Alternativa D — ❌ Incorreta
A dupla CREATE TABLE backup_cliente AS SELECT * FROM cliente (cópia completa) seguida de INSERT INTO backup_cliente SELECT LIMIT 3 FROM cliente é problemática. O segundo comando tem sintaxe errada: SELECT LIMIT 3 sem cláusula SELECT * ou lista de colunas – o correto seria SELECT * FROM cliente LIMIT 3.
Alternativa E — ❌ Incorreta
BACKUP TABLE cliente to backup_cliente não é um comando SQL padrão do PostgreSQL. Para fazer backup de uma tabela, utiliza-se o utilitário externo pg_dump ou o comando COPY. Não existe BACKUP TABLE no SQL do PostgreSQL.
Gabarito: letra A.