Annonce
Les inscriptions sont ouvertes ! L'association GeoRezo sera présente
Pages: 1
- Sujet précédent - QGIS: SQL index partiel unique avec WHERE considere Unique - Sujet suivant
#1 Aujourd'hui 18:54
- ciok
- Juste Inscrit !
- Date d'inscription: 23 May 2023
- Messages: 6
QGIS: SQL index partiel unique avec WHERE considere Unique
Bonjour,
J'ai une base PostGIS créé dans pgAdmin, que j'utilise dans QGIS 3.44. Dans cette base, l'une de mes tables a l'index suivant (noms modifiés pour confidentialité) :
Code:
CREATE UNIQUE INDEX IF NOT EXISTS mon_index_idx
ON schema.table USING btree
(mon_champ ASC NULLS LAST)
WITH (deduplicate_items=True)
TABLESPACE pg_default
WHERE condition IS TRUE;mon_champ est défini comme bigint NOT NULL
Il est également impliqué dans deux contraintes :
Code:
CONSTRAINT contrainte_unicite UNIQUE (mon_champ, mon_autre_champ)
et
Code:
CONSTRAINT contrainte_fkey FOREIGN KEY (mon_champ)
REFERENCES schema.autre_table (mon_champ_dans_autre_table) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADEDans QGIS, par défaut, le formulaire de ma couche coche "Unique" et "Renforcer la contrainte de valeur unique", sans prendre en compte mon WHERE condition IS TRUE.
Décocher ces deux paramètres de formulaire sur une couche ou deux ne coûte pas grand chose.. mais s'il faut le faire sur plein de couches ça peut devenir pénible, et surtout, je suis curieux.
Une IA générative me dit que :
Dans QGIS 3.40, le provider PostgreSQL charge les champs en allant chercher les index uniques avec cette logique :
Code:
SELECT DISTINCT indrelid, indkey, indisunique FROM pg_index WHERE indisuniquepuis il associe ça au champ si attnum::text = indkey::text. Il ne récupère pas indpred, donc il ne sait pas que l’index est partiel.
Or dans PostgreSQL, pg_index.indpred est précisément la colonne qui contient le prédicat d’un index partiel ; elle vaut NULL seulement si l’index n’est pas partiel.
Aller lire le provider PostgreSQL dépasse un peu mes compétences actuelles.
Que pensez-vous de cette explication ?
Pensez-vous que cela puisse être une piste d'amélioration pour les prochaines versions de QGIS ?
Dernière modification par ciok (Aujourd'hui 18:56)
Hors ligne
Pages: 1
- Sujet précédent - QGIS: SQL index partiel unique avec WHERE considere Unique - Sujet suivant


