banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 30 March 2017 14:41

Cec_78
Participant actif
Lieu: Fontenay-le-Fleury (78)
Date d'inscription: 10 Feb 2013
Messages: 56

QGIS 2.18.3: Echec d'ouverture de vue Postgis

Bonjour,

Je viens vers vous pour évoquer à nouveau un sujet récurrent, celui de l'ouverture d'une vue Postgis dans QGIS.
Je précise que je travaille avec PostgreSQL 9.6 et Postgis 2.3.2.

Le point particulier est que la vue que je ne parviens pas à ouvrir dans QGIS a été créée à partir de colonnes qui proviennent de 2 tables (avec une jointure, donc), selon la requête suivante:

Code:

CREATE OR REPLACE VIEW distant_temp.finess_view2 AS

SELECT 
  a."ID"
, a."NumoFINESSET1"
, a."NumoFINESSEJ"
, a."Raisonsociale"
, a."Raisonsocialelongue"
, a."Complentderaisonsociale"
, a."Complentdedistribution"
, a."Numodevoie"
, a."Typedevoie"
, a."Libelldevoie"
, a."Complentdevoie"
, a."LieuditBP"
, a."CodeCommune"
, a."Dartement"
, a."Libelldartement"
, a."LignedacheminementCodePostalLibcommune"
, a."Thone"
, a."Topie"
, a."Catoriedablissement"
, a."Libellecatoriedablissement"
, a."Catoriedagratdablissement"
, a."Libellcatoriedagratdablissement"
, a."NumodeSIRET"
, a."CodeAPE"
, a."CodeMFT"
, a."LibelleMFT"
, a."CodeSPH"
, a."LibelleSPH"
, a."Datedouverture"
, a."Datedautorisation"
, a."Datedemisejoursurlastructure"
, a."Numoucationnationale"
, a."NumoFINESSET2"
, b."role" AS role_ght
, b."GHT_Role" AS nom_ght
, a."CoordonnsX"
, a."CoordonnsY"
, a."Datedemisejourdescoordonns"
, ST_SetSRID(ST_MakePoint(to_number(a."CoordonnsX", '9999999.99'), to_number(a."CoordonnsY", '9999999.99')),2154)::geometry(Point, 2154) AS geom
  FROM distant_temp.finess a
LEFT JOIN distant_temp.ght b
ON a."NumoFINESSET1"=b."Finess";

La table finess contient de la géométrie point, la table ght est une table sans géométrie.

Les vues sans jointure s'ouvrent sans problème, pour peu que je précise la colonne d'identifiant unique lors de l'ouverture dans QGIS (j'ai testé la création de la vue finess sans jointure avec ght.

Auriez-vous une idée de ce qui coince?

Merci d'avance pour vos lumières!

Cec.

Hors ligne

 

#2 Thu 30 March 2017 15:50

Cec_78
Participant actif
Lieu: Fontenay-le-Fleury (78)
Date d'inscription: 10 Feb 2013
Messages: 56

Re: QGIS 2.18.3: Echec d'ouverture de vue Postgis

Fausse alerte, je viens de faire une recherche de doublons sur le champ ID de cette vue et il y en a!

Le problème vient de doublons dans ma table ght de départ, celle jointe à ma table finess.

Je pense que l'échec d'ouverture dans QGIS se résoudra lorsque j'aurai fait le ménage.

Hors ligne

 

#3 Thu 30 March 2017 18:11

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 2.18.3: Echec d'ouverture de vue Postgis

Pour être certain de pouvoir ouvrir une vue sous qgis, le mieux est de créer un identifiant unique avec row_number comme suit :

Code:

CREATE OR REPLACE VIEW distant_temp.finess_view2 AS

SELECT
row_number() over () as pk
, a."ID"
, a."NumoFINESSET1"
, a."NumoFINESSEJ"
, a."Raisonsociale"
, a."Raisonsocialelongue"
, a."Complentderaisonsociale"
, a."Complentdedistribution"
, a."Numodevoie"
, a."Typedevoie"
, a."Libelldevoie"
, a."Complentdevoie"
, a."LieuditBP"
, a."CodeCommune"
, a."Dartement"
, a."Libelldartement"
, a."LignedacheminementCodePostalLibcommune"
, a."Thone"
, a."Topie"
, a."Catoriedablissement"
, a."Libellecatoriedablissement"
, a."Catoriedagratdablissement"
, a."Libellcatoriedagratdablissement"
, a."NumodeSIRET"
, a."CodeAPE"
, a."CodeMFT"
, a."LibelleMFT"
, a."CodeSPH"
, a."LibelleSPH"
, a."Datedouverture"
, a."Datedautorisation"
, a."Datedemisejoursurlastructure"
, a."Numoucationnationale"
, a."NumoFINESSET2"
, b."role" AS role_ght
, b."GHT_Role" AS nom_ght
, a."CoordonnsX"
, a."CoordonnsY"
, a."Datedemisejourdescoordonns"
, ST_SetSRID(ST_MakePoint(to_number(a."CoordonnsX", '9999999.99'), to_number(a."CoordonnsY", '9999999.99')),2154)::geometry(Point, 2154) AS geom
  FROM distant_temp.finess a
LEFT JOIN distant_temp.ght b
ON a."NumoFINESSET1"=b."Finess";

Après, c'est aussi le meilleur de se tromper car en faisant cela on peut supposer à tort que le champs ID est unique. Donc ne pas utiliser row_number permet de s assurer de l unicité de sa présupposée clé primaire .
Cordialement,

Dernière modification par lejedi76 (Thu 30 March 2017 18:13)

Hors ligne

 

#4 Fri 31 March 2017 09:20

Cec_78
Participant actif
Lieu: Fontenay-le-Fleury (78)
Date d'inscription: 10 Feb 2013
Messages: 56

Re: QGIS 2.18.3: Echec d'ouverture de vue Postgis

Bonjour,

Merci pour l'astuce, je la note précieusement!

Hors ligne

 

Pied de page des forums

Powered by FluxBB