Pular para o conteúdo principal

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

Banco de DadosPostgreSQL
Código
fg086315
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Especificação, Projeto e Arquitetura de Sistemas de Software para o Processamento e Distribuição de Imagens de Sensoriamento Remoto
Considere que o objetivo do código a seguir é criar uma base de dados no SGBD PostgreSQL com extensão espacial PostGIS.Q15.png 426×222Em relação ao código supracitado, analise as afirmativas a seguir e assinale (V) para a verdadeira e (F) para a falsa.( ) Da forma como foi declarado, id_waypoint atende os critérios necessários para ser chave primária.( ) O bloco de código compreendido entre as linhas 7 e 10 adiciona a parte espacial à base de dados pela criação de um atributo geométrico do tipo ponto.( ) A função ST_SetSRID poderia ser substituída pela função ST_Transform, tendo em vista que a função ST_SetSRID transformará o sistema de coordenadas da camada, pois a geometria foi criada sem definição de sistema na linha 8.As afirmativas são, respectivamente,
  1. AV – V – V.
  2. BV – F – F.
  3. CV – V – F.
  4. DF – V – V.
  5. EF – V – F.
Revelar gabarito e comentário

GabaritoE — F – V – F.

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 e PostGIS: chave primária, geometria e SRID

Gabarito: letra E (F – V – F). A primeira afirmativa é falsa porque a coluna id_waypoint foi declarada apenas como SERIAL, sem a restrição PRIMARY KEY — o que a torna uma chave candidata, mas não uma chave primária de fato. A segunda é verdadeira: o bloco entre as linhas 7 e 10 cria uma coluna do tipo geometry(Point, 4326), adicionando a parte espacial à tabela. A terceira é falsa porque ST_SetSRID apenas atribui um SRID à geometria, sem transformar as coordenadas; a transformação de fato seria feita por ST_Transform.

A questão exige conhecer três conceitos do PostgreSQL/PostGIS: o que define uma chave primária, como se cria um atributo geométrico e a diferença entre as funções ST_SetSRID e ST_Transform. Vamos a cada um.

1. Chave primária no PostgreSQL

Uma chave primária é uma restrição que garante a unicidade e a não nulidade dos valores da coluna (ou conjunto de colunas). No PostgreSQL, ela é declarada explicitamente com PRIMARY KEY na definição da coluna ou da tabela. O tipo SERIAL (ou BIGSERIAL) cria uma sequência automática, mas não impõe, por si só, a restrição de chave primária. Ou seja, uma coluna SERIAL pode conter valores duplicados ou nulos se não houver a restrição. Para que id_waypoint fosse chave primária, o código deveria ter algo como id_waypoint SERIAL PRIMARY KEY ou uma constraint separada (CONSTRAINT pk_waypoint PRIMARY KEY (id_waypoint)).

2. Atributo geométrico no PostGIS

O PostGIS é a extensão espacial do PostgreSQL, que adiciona tipos de dados geométricos e funções para manipulação de dados georreferenciados. Para criar um atributo geométrico, usa-se o tipo geometry (ou geography), que pode ser definido com um subtipo (como Point, LineString, Polygon) e um SRID (Sistema de Referência Espacial). No código, a linha 8 cria a coluna geom com o tipo geometry(Point, 4326), onde 4326 é o SRID do sistema WGS 84 (usado pelo GPS). O bloco entre as linhas 7 e 10, portanto, adiciona a parte espacial à tabela, criando um atributo geométrico do tipo ponto.

3. ST_SetSRID vs ST_Transform

A função ST_SetSRID atribui um SRID a uma geometria que não possui definição de sistema de coordenadas. Ela não altera as coordenadas em si — apenas informa ao banco em qual sistema a geometria está. Já a função ST_Transform converte as coordenadas de um SRID para outro, ou seja, transforma efetivamente os valores das coordenadas. No código, a geometria foi criada sem SRID na linha 8, e a linha 9 usa ST_SetSRID para atribuir o SRID 4326. Se a intenção fosse transformar as coordenadas de um sistema para outro, seria necessário usar ST_Transform. Portanto, a afirmativa III é falsa: ST_SetSRID não transforma o sistema de coordenadas, apenas o define.

Pegadinha da banca: a banca explora a confusão entre ST_SetSRID e ST_Transform. Muitos candidatos acham que ST_SetSRID transforma as coordenadas, mas ela apenas atribui o SRID. A transformação real é feita por ST_Transform. Fique atento a essa distinção, que é clássica em questões de PostGIS.

Critério

id_waypoint (SERIAL)

Coluna geom (geometry(Point, 4326))

Papel no código

Identificador numérico automático da tabela

Atributo espacial que armazena o ponto geográfico

Restrição de unicidade/nulidade

Nenhuma imposta pelo tipo SERIAL (pode ter duplicados/nulos)

Não se aplica (tipo espacial, sem restrição de unicidade)

Exigência para ser chave primária

Requer PRIMARY KEY explícita (na coluna ou via constraint)

Não é candidata a chave primária (dado espacial)

Função relacionada no código

Nenhuma (apenas geração de sequência)

ST_SetSRID atribui SRID 4326 (não transforma coordenadas)

Efeito de ST_Transform (se usado)

Não se aplica

Converteria coordenadas de um SRID para outro (transformação real)

Alternativa A — ❌ Incorreta

A alternativa A afirma que a sequência é V – V – V. Isso está errado porque a primeira afirmativa é falsa: id_waypoint não é chave primária, pois foi declarada apenas como SERIAL, sem a restrição PRIMARY KEY. A terceira afirmativa também é falsa, pois ST_SetSRID não transforma coordenadas. Portanto, a sequência correta é F – V – F, não V – V – V.

Alternativa B — ❌ Incorreta

A alternativa B afirma que a sequência é V – F – F. Isso está errado porque a segunda afirmativa é verdadeira: o bloco entre as linhas 7 e 10 cria um atributo geométrico do tipo ponto. A primeira afirmativa é falsa, e a terceira também é falsa, mas a segunda é verdadeira, então a sequência correta é F – V – F, não V – F – F.

Alternativa C — ❌ Incorreta

A alternativa C afirma que a sequência é V – V – F. Isso está errado porque a primeira afirmativa é falsa: id_waypoint não é chave primária, pois foi declarada apenas como SERIAL, sem a restrição PRIMARY KEY. A segunda afirmativa é verdadeira, e a terceira é falsa, mas a primeira é falsa, então a sequência correta é F – V – F, não V – V – F.

Alternativa D — ❌ Incorreta

A alternativa D afirma que a sequência é F – V – V. Isso está errado porque a terceira afirmativa é falsa: ST_SetSRID não transforma o sistema de coordenadas, apenas atribui o SRID. A primeira afirmativa é falsa, e a segunda é verdadeira, mas a terceira é falsa, então a sequência correta é F – V – F, não F – V – V.

Alternativa E — ✅ Correta ⟵ GABARITO

A alternativa E afirma que a sequência é F – V – F. Isso está correto: a primeira afirmativa é falsa (id_waypoint não é chave primária, pois foi declarada apenas como SERIAL, sem a restrição PRIMARY KEY), a segunda é verdadeira (o bloco entre as linhas 7 e 10 cria um atributo geométrico do tipo ponto), e a terceira é falsa (ST_SetSRID não transforma o sistema de coordenadas, apenas atribui o SRID). Portanto, a sequência correta é F – V – F.

PEGA ESSA DICA!

Para questões de PostGIS, lembre-se: ST_SetSRID define o SRID (não transforma), ST_Transform converte o SRID (transforma as coordenadas). E SERIAL não é chave primária — é apenas um tipo que gera sequência automática. A chave primária exige a restrição PRIMARY KEY.

Gabarito: letra E

Link permanente: /questoes/fg086315