Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Printemps des cartes 2024

#1 Fri 10 October 2014 16:33

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bonjour,

J'ai découvert avec horreur un bug très gênant sur QGIS, j’espère que vous pourrez m'aider.


Situation:

J'édite avec QGIS une table PostGIS de type point (des fosses à déchets).

Cette table à une relation d'un attribut vers une table de valeurs (liste de choix).

[img]http://img4.hostingpics.net/pics/574322Capture.png[/img]

La relation est configurée dans QGIS comme suit:

Attribut "FK_TYPE" > Outil d'édition 'Valeur relationnelle' > Couche T_TYPE, Colonne clé "ID", Colonne de valeurs "VALEUR"

J'ai aussi coché Autorisé une valeur nulle.


Le bug:

Je défini pour un objet T_FOSSE une valeur pour "FK_TYPE" et j'enregistre... aucun problème.

Si je réédite ce même objet et je choisi (pas de sélection) pour l'attribut "FK_TYPE", au moment de l’enregistrement, erreur de commit !!!

[img]http://img11.hostingpics.net/pics/969169Capture.png[/img]

QGIS définit (pas de sélection) en valeur '0' au lieu de NULL et donc, message d'erreur:

[img]http://img11.hostingpics.net/pics/988819Capture.png[/img]

Toutes aides est la bienvenue, je suis absent ce week-end, pas d'émois si je ne réponds pas tout de suite.

Merci d'avance.

Hors ligne

 

#2 Mon 13 October 2014 09:49

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1222
Site web

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bonjour dungeonkeeper81,

As-tu regardé le réglage de la "représentation des valeurs NULL" présent dans les options de QGis sous l'onglet "Sources de données".

Est-il bien à NULL ?


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Mon 13 October 2014 10:06

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bonjour MathieuB,

Merci pour cette piste. La représentation des valeurs NULL est bien à NULL.

J'ai aussi essayé en laissant cette représentation vide mais cela ne résout pas le problème.

Hors ligne

 

#4 Mon 13 October 2014 10:34

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3807

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bonjour,
J'utilise encore trop peu ces fonbctionnalités de QGIS pour percevoir toute ta démarche mais la valeur "NULL" fait-elle partie des valeurs possibles de ta clé étrangère dans PostGIS?

Hors ligne

 

#5 Mon 13 October 2014 12:21

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bien le bonjour SANTANNA,

Non, la valeur NULL ne fait pas parti des valeurs possibles des clés étrangères dans PostGIS.

Une solution à froid serait d'implémenter la valeur NULL avec l'ID '0' dans la table des valeurs possibles... mais ce n'est pas très académique.

Hors ligne

 

#6 Mon 13 October 2014 12:58

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3807

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Et pourquoi ne pas plutôt implémenter NULL (ou "en attente", "A renseigner", "Non défini"... smile) comme une des valeurs possibles de ton champ dans rm_fosse_tbd_type? Tu rencontres bien une situation ou à un moment donné, tu n'as pas l'info sur le type de fosse et aucune des deux autres valeurs n'est appropriée...
Il ne faut pas confondre ce que QGIS propose comme interface pour faciliter la saisie et ce que ta base de données autorise (c'est elle qui a le dernier mot). Je pense que le système tel qu'il est passerait si ton champ "type" n'avait pas obligation (dans ta structure de BD) de n'autoriser que "fosse à benne" et "fosse à déchets". Si tu n'autorises pas le null, QGIS aura beau essayer, ça ne passera pas.
J'imagine notamment que dans un contexte de shapefile ou il n'y a pas ces relations, le NULL devrait passer sans souci.

Hors ligne

 

#7 Mon 13 October 2014 13:39

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Ok, donc je vais implémenter 'Non défini' avec un "ID" de '0' dans la liste de valeur.

C'est ce que je disais juste avant, c'est une solution qui fonctionne.

Merci.

Hors ligne

 

#8 Mon 19 January 2015 11:53

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1222
Site web

Re: QGIS 2.4 : Bug avec PostGIS, valeur NULL transcrite par '0'

Bonjour à tous,

dungeonkeeper81 a écrit:

Non, la valeur NULL ne fait pas parti des valeurs possibles des clés étrangères dans PostGIS.


Je viens de tester la close "MATCH FULL" d'une contrainte de clé étrangère (MATCH SIMPLE est la close par défaut).
Elle permet de ne pas renseigner la colonne.

La contrainte n'est vérifiée que si la clé étrangère est renseignée.

Code:

CREATE TABLE temp.toto
(
  id serial PRIMARY KEY,
  id_table_liee integer NULL,
  CONSTRAINT fk_tot_intervention_sur_site FOREIGN KEY (id_table_liee)
      REFERENCES intervention_site.intervention_sur_site (id_intervention) MATCH FULL
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

INSERT INTO temp.toto(id_table_liee) VALUES (12);
/*La requête a été exécutée avec succès : une ligne modifiée. La requête a été exécutée en 13 ms.*/

INSERT INTO temp.toto(id_table_liee) VALUES (null);
/*La requête a été exécutée avec succès : une ligne modifiée. La requête a été exécutée en 12 ms.*/

INSERT INTO temp.toto(id_table_liee) VALUES (12000);
/*ERREUR:  une instruction insert ou update sur la table « toto » viole la contrainte de clé
étrangère « fk_tot_intervention_sur_site »
DETAIL:  La clé (id_table_liee)=(12000) n'est pas présente dans la table « intervention_sur_site ».*/

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB