O QGIS retorna a mensagem "Camada Inválida" ao tentar adicionar a exibição PostGIS?

14

Eu sou novo no Postgis e no QGIS. Eu criei uma visão definida como

CREATE OR REPLACE VIEW pupr.vstudentmuni AS 
 SELECT m.id AS munid, m.name AS muname, m.geom, s.code, 
    (s.name::text || ' '::text) || s.lastname::text AS fullname
   FROM pupr.municipio m, pupr.student_location l, pupr.student s
  WHERE st_within(l.geom, m.geom) AND s.code = l.code;

no PostgreSQL. Tentar adicionar essa visualização ao QGIS retorna o seguinte erro ...

"Invalid layer"..."sql= is an invalid layer and cannot be loaded."

Não tenho certeza qual é o problema. A tabela é mencionada na geommetry_columnstabela no PostGIS, mas posso ver uma entrada de mensagem no QGIS que diz "Nenhum campo-chave para determinada exibição". Estou usando o PostgreSQL 9.2 e o QGIS 1.8.0.

ufeliciano
fonte
1
O problema parece estar relacionado ao campo-chave exclusivo; você deve ter um. Não conheço seus dados, talvez você possa explicar um pouco mais sobre o que deseja obter com sua consulta. Como você está abrindo a camada no QGIS? Você escolheu uma chave? Pelo que você descreveu, apenas o s.code pode ser usado como chave exclusiva. Além disso, suas geometrias municipio serão repetidas várias vezes para cada aluno, é isso que você deseja?
Alexandre Neto

Respostas:

6

Ao adicionar uma visualização do PostGIS ao QGIS, você deve especificar o campo de ID exclusivo. À direita do nome da camada, haverá uma lista suspensa, onde você pode especificar qual campo usar. Se você não tiver um campo de ID exclusivo, poderá criar um campo de ID falso usando a função da janela row_number () na consulta que cria sua exibição.

HeyOverThere
fonte
Esta pergunta está relacionada e fornece mais detalhes sobre a seleção do seu campo de ID exclusivo na interface gráfica do QGIS.
precisa saber é o seguinte
E essa pergunta fornecerá mais detalhes sobre como criar uma exibição com um ID exclusivo.
precisa saber é o seguinte
Obrigado a todos pelas respostas. Problema resolvido usando a função sugerida.
Ufeliciano
1

Hoje encontrei esse erro com uma exibição criada a partir de uma junção entre tabelas. Acabou tendo dois campos únicos que perturbaram os QGis. Inicialmente, a visão era como:

CREATE OR REPLACE VIEW my_view AS
SELECT *
  FROM more_data m,
       node n   
 WHERE m.id_node = n.id;

Dessa forma, havia dois campos de chave primária na exibição. Em vez disso, tive que especificar os campos resultantes, para finalizar um único candidato a campo para identificador exclusivo:

CREATE OR REPLACE VIEW my_view AS
SELECT n.id,
       n.name,
       n.geom,
       m.type,
       m.other_stuff,
       m.more_stuff
  FROM more_data m,
       node n   
 WHERE m.id_node = n.id;
Luís de Sousa
fonte