PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 31/12/2021 01:53:04

Lamethode
Membre

Chevauchement de données

Bonjour à tous,
Étant nouveau utilisateur de postgres, j'ai créé une base de données sous postgres 13. Elle contient des tables
dont 4 Champs
ID integer (PK)
Numéro entité varchar (20)
début double precision not null
fin double precision not nulle.
Je souhaite créé une contrainte qui vérifiera que pour un numéro d'entité identique, les champs début et fin d'un enregistrement ne doivent pas chevaucher avec un autre enregistrement.
Je précise que la clé primaire définie ou choisi ne règle pas mon problème.
Merci de m'aider.

Hors ligne

#2 31/12/2021 10:12:48

gleu
Administrateur

Re : Chevauchement de données

C'est généralement possible avec la contrainte EXCLUDE, mais il vous faut un champ de type RANGE dans ce cas, et il n'existe pas de RANGE pour le type double precision. Donc je ne vois que deux possibilités :

* si vous pouvez utiliser un numeric à la place du double precision, transformer les deux champs double precision en un champ numrange, ce qui permettra d'utiliser une contrainte EXCLUDE
* écrire un trigger qui réalisera la contrainte.

La première solution me paraît plus propre et plus simple. C'est en tout cas avec elle que je commencerais.


Guillaume.

Hors ligne

#3 31/12/2021 11:16:19

rjuju
Administrateur

Re : Chevauchement de données

Il devrait être possible de déclarer une contrainte d'exclusion avec un cast explicite des double en numeric pour en faire un numrange.  Bien évidemment, cela n'évitera pas les problèmes de précisions liés au type double precision.  Si c'est quelque chose qui peut poser problème, alors modifier la table pour stocker des numeric est effectivement la meilleure chose à faire.

Hors ligne

#4 02/01/2022 12:24:44

Lamethode
Membre

Re : Chevauchement de données

Merci Guillaume pour ta contribution.
Stp peux-tu me mettre sur la voie pour le trigger ou la contrainte exclude?

Hors ligne

#5 02/01/2022 12:26:24

Lamethode
Membre

Re : Chevauchement de données

Merci julien.
Je vais transformer les doubles précision en numerique

Hors ligne

#6 02/01/2022 16:17:19

rjuju
Administrateur

Re : Chevauchement de données

Pour les contraintes d'exclusion vous pouvezz consulter la documentation, par exemple :


* https://www.postgresql.org/docs/current … -EXCLUSION
* https://www.postgresql.org/docs/current … CONSTRAINT

Hors ligne

#7 02/01/2022 23:54:30

Lamethode
Membre

Re : Chevauchement de données

Merci Julien

Hors ligne

Pied de page des forums