Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Création des VMs invertebres, vertebres et flore interrompu (sous-requête renvoie plus d'une ligne) #79

Open
JulesGrillot opened this issue Aug 22, 2024 · 0 comments

Comments

@JulesGrillot
Copy link

JulesGrillot commented Aug 22, 2024

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 :

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
                )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant