L'erreur rencontrée :
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.CardinalityViolation) ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
Il semblerait que ce soit la sous-requête suivante qui pose problème :
synthese_taxa AS (
SELECT
synthese.id_synthese,
(
SELECT t_zh.id_zh
FROM pr_zh.t_zh
WHERE st_intersects(st_setsrid(t_zh.geom, 4326), st_setsrid(synthese.the_geom_point, 4326))
) AS id_zh,
synthese.cd_nom,
synthese.date_max,
synthese.observers,
(
SELECT organisme
FROM utilisateurs.v_userslist_forall_applications
WHERE nom_role || ' ' || prenom_role = synthese.observers limit 1
)
FROM gn_synthese.synthese
)
La création de id_zh renvoie effectivement plusieurs fois la même entité, il faudrait peut-être créer une sous requête supplémentaire qui contient id_synthese et id_zh et la joindre a synthese_taxa.
Comme ceci (fonctionne lors de la réinstallation du module à condition de recréer les VMs pr_zh.vm_vertebrates, pr_zh.vm_invertebrates et pr_zh.vm_flora):
WITH
t_id_zh AS (
SELECT synthese.id_synthese, t_zh.id_zh
FROM pr_zh.t_zh, gn_synthese.synthese
WHERE st_intersects(st_setsrid(t_zh.geom, 4326), st_setsrid(synthese.the_geom_point, 4326))
ORDER BY id_zh
),
synthese_taxa AS (
SELECT
synthese.id_synthese,
t_id_zh.id_zh,
synthese.cd_nom,
synthese.date_max,
synthese.observers,
(
SELECT organisme
FROM utilisateurs.v_userslist_forall_applications
WHERE nom_role || ' ' || prenom_role = synthese.observers limit 1
)
FROM gn_synthese.synthese
JOIN t_id_zh ON t_id_zh.id_synthese = synthese.id_synthese
)
L'installation du module version 1.3.1 se bloque lors de la création des VMs : [https://github.com/PnX-SI/gn_module_ZH/blob/3ffb8d1d5119c8345e0e2fce1b487666627f1b27/backend/gn_module_zh/migrations/c0c4748a597a_create_vm_taxons.py#L21](Code SQL présent ici)
L'erreur rencontrée : sqlalchemy.exc.ProgrammingError: (psycopg2.errors.CardinalityViolation) ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
Il semblerait que ce soit la sous-requête suivante qui pose problème :
La création de id_zh renvoie effectivement plusieurs fois la même entité, il faudrait peut-être créer une sous requête supplémentaire qui contient id_synthese et id_zh et la joindre a synthese_taxa. Comme ceci (fonctionne lors de la réinstallation du module à condition de recréer les VMs pr_zh.vm_vertebrates, pr_zh.vm_invertebrates et pr_zh.vm_flora):