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

Depuis plusieurs semaines, quand un utilisateur (membre des forums) poste un message (bouton "envoyer"), le délai de mise en ligne est proche de 10 secondes.
Merci de patienter et de ne pas rafraichir l'écran.
Yves (webmaster) est sur le coup wink
Merci pour votre compréhension.

#1 Tue 29 January 2019 19:42

raster31
Participant occasionnel
Date d'inscription: 13 Oct 2016
Messages: 21

désactiver la valeur par défaut "0" d'un champ integer en cas d'update

Bonjour à tous,

je rencontre un petit soucis... je travaille sur une base de données PostGIS (2.3) avec l'interface PgAdmin III.

J'ai des champs de type integer qui peuvent être NULL (saisie non obligatoire donc).
Lorsqu'une personne crée un objet, et qu'elle ne remplit pas tous les champs de type integer, ces derniers présentent bien la mention NULL après l'insert.
Par contre si une autre personne vient faire un update sur cet objet (spatiale ou attributaire) et qu'elle ne remplit toujours pas les champs de type integer, ces derniers ne présentent plus la mention NULL mais se remplissent automatiquement avec un 0 (zéro) or j'aimerais que cela reste à NULL.
J'imagine qu'en basculant les champs de type integer sur du character varying, je n'aurais pas ce problème mais le schéma est synchronisé avec un autre schéma où des calculs sont faits et ça créerait donc des bugs si je changeais les types.

Auriez vous des solutions à m'apporter svp !?

Hors ligne

 

#2 Tue 29 January 2019 22:50

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

Une colonne n'est changée qu'explicitement par un UPDATE,
j'en déduis que les mises à jour sont lancées par une application tierce,
l'éditeur de données de PG Admin ou autre.

Dans ce cas, peut être que vous pourriez changer le comportement
de votre application.

Si cela n'est pas possible :
Si la valeur 0 n'appartient pas au domaine de la colonne,
vous pouvez créer un trigger qui transformera les 0 en NULL,
ou créer une vue qui fera la même chose et que vous utiliserez
dans vos calculs à la pace de votre table.
Si par contre, 0 fait partie du domaine de la colonne, vous ne
pourrez pas distinguer les faux NULL d'une vraie valeur 0 rentrée par
l'utilisateur, à moins que vous ne puissiez le déduire avec autre chose.

Dernière modification par tumasgiu (Tue 29 January 2019 22:56)

Hors ligne

 

#3 Wed 30 January 2019 09:09

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

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

Bonjour,

quelle application est utilisée pour faire la mise à jour problématique ?
La solution est à chercher de ce coté d'abord. Une valeur non renseignée ne doit pas être transformée en une valeur non nulle...


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#4 Wed 30 January 2019 11:00

raster31
Participant occasionnel
Date d'inscription: 13 Oct 2016
Messages: 21

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

En fait c'est une base de données connectée à un portail web carto Lizmap....
Les utilisateurs peuvent faire des éditions en ligne et cela génère par le biais d'une fonction un mail automatique  qui est envoyé à l'utilisateur et à l'administrateur sous forme de deux tableaux comparatifs (valeurs anciennes/valeurs nouvelles). Ainsi normalement seuls les champs qui ont été modifiés doivent être repris dans ces tableaux. Pourtant j'y retrouve à chaque fois tous les champs de type integer même si ces derniers sont restés vierges (ils passent de null à 0). (cf les 2 captures d'écran dans les messages suivants).
En me renseignant, j'ai appris que la valeur par défaut d'un champ de type integer est 0. Je pensais que c'était plus à ce niveau qu'il fallait creuser mais peut être en effet est-ce au niveau de Lizmap...  Je vais continuer de chercher une solution car en effet un trigger qui ferait un replace ne conviendrait pas car 0 peut être une valeur saisie dans ces champs de type integer.

Hors ligne

 

#5 Wed 30 January 2019 11:05

raster31
Participant occasionnel
Date d'inscription: 13 Oct 2016
Messages: 21

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

tableau des valeurs anciennes avec les valeurs nulles

Dernière modification par raster31 (Wed 30 January 2019 11:05)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Wed 30 January 2019 11:11

raster31
Participant occasionnel
Date d'inscription: 13 Oct 2016
Messages: 21

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

tableau des valeurs nouvelles avec les 0


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#7 Wed 30 January 2019 14:24

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

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

Nous sommes bien d'accord que les données quand vous les consultez avec pgadmin présentent bien des 0 à la place des NULL.
De même vous confirmez que vous n'avez pas de fonction susceptible de manipuler les données (déclenchée lors de l'édition par trigger ou autre) qui pourrait expliquer la transformation de ces 0 en null ?

Si tel est le cas, le souci ne se situe coté base de données et il vous faut cherchez du coté de QGIS et de LIZMAP :
Regardez du coté de votre projet QGIS si vous n'avez pas mis une valeur par défaut 0 à vos champs de type integer.
idem pour la config de votre projet LIZMAP.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#8 Wed 30 January 2019 14:29

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3161
Site web

Re: désactiver la valeur par défaut "0" d'un champ integer en cas d'update

Bonjour

En me renseignant, j'ai appris que la valeur par défaut d'un champ de type integer est 0


Celui qui vous a dit ça vous a dit une co***rie. La valeur NULL est la valeur par défaut de tout les types de données. A ne pas confondre avec nulle (ou nul ) en français.

A l'évidence cela vient de votre interface lizmap, confère les propos de MathieuB. [les premiers on vient de croiser les posts]

Dernière modification par ChristopheV (Wed 30 January 2019 14:30)


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB