Impossible de charger la table partitionnée PostGIS dans QGIS

8

J'ai partitionné une table (plus de 13 millions de données de points géographiques) dans ma base de données PostgreSQL avec cette déclaration:

CREATE TABLE data.data_fusion (
 id                BIGINT NOT NULL,
 source            TEXT,
 id_source         VARCHAR,
 id_vn             INTEGER,
 taxref_id         INTEGER,
 ...
 geom              GEOMETRY(Point, 2154),
 equipe            VARCHAR,
 exp_excl          BOOLEAN
 )
PARTITION BY LIST (equipe);

Et pour chaque table enfant, j'ai créé une clé primaire et des index comme dans cet exemple.

CREATE TABLE data.data_fusion_lpo07 PARTITION OF data.data_fusion FOR VALUES IN ('lpo07');
ALTER TABLE data.data_fusion_lpo07 ADD PRIMARY KEY (id);
CREATE INDEX ON data.data_fusion_lpo07 (source);
CREATE INDEX ON data.data_fusion_lpo07 (id_vn);
CREATE INDEX ON data.data_fusion_lpo07 (taxref_id);
CREATE INDEX ON data.data_fusion_lpo07 (nom_vern);
CREATE INDEX ON data.data_fusion_lpo07 (nom_sci);
CREATE INDEX ON data.data_fusion_lpo07 USING GIST (geom);
CREATE INDEX ON data.data_fusion_lpo07 (equipe);
CREATE INDEX ON data.data_fusion_lpo07 (code_nidif_oiseau);

En fait, il n'y a aucun problème pour charger les tables enfants dans mon projet QGIS, mais je ne parviens pas à charger la table parent 'data.data_fusion'. J'ai les messages d'erreur suivants:

  • Utilisation du panneau du navigateur:

    Layer is not valid: The layer dbname='dbwork' host=bdd.faura.org port=5432 sslmode=require authcfg=lpoaura srid=2154 type=Point table="data"."data_fusion" (geom) sql= is not a valid layer and can not be added to the map
  • Utilisation du menu d'ajout de calque

    dbname='dbwork' host=bdd.faura.org port=5432 sslmode=require authcfg=lpoaura key='""' estimatedmetadata=true srid=2154 type=Point table="data"."data_fusion" (geom) sql= is an invalid layer - not loaded

La console PostgreSQL indique un problème de pk (pas de pk sur la table parent):

  Unexpected relation type 'p'.
  PostgreSQL layer has no primary key.

Existe-t-il un moyen de charger ma table partitionnée parent dans QGIS (v 2.18.14)?

lpofredc
la source

Réponses:

6

Il semble que le partitionnement natif de PostgreSQL ne soit pas pris en charge dans QGIS 2.x. Cela devrait fonctionner comme prévu dans QGIS 3. Voir ticket associé et commit .

Pour contourner ce problème, vous pouvez créer une vue SELECT *provenant uniquement de votre table principale et l'intégrer dans QGIS.

dbaston
la source
Merci! cela a fonctionné pour moi. Même avec la sécurité de niveau ligne activée sur la table! En fait, je ne peux pas migrer vers une version plus récente de qgis, il y a un problème de connexion à postgresql avec le protocole ssl sécurisé, comme mentionné dans ce numéro: issues.qgis.org/issues/17672
lpofredc