-
Notifications
You must be signed in to change notification settings - Fork 46
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
Feat: improve performances for syntheseff view #397
base: develop
Are you sure you want to change the base?
Conversation
data/gn2/atlas_synthese.sql
Outdated
@@ -1,50 +1,90 @@ | |||
-- Creation d'une vue permettant de reproduire le contenu de la table du même nom dans les versions précédentes | |||
|
|||
CREATE VIEW synthese.syntheseff AS | |||
WITH areas AS ( | |||
CREATE MATERIALIZED VIEW atlas.vm_cor_synthese_area |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Après discussion avec @TheoLechemia , il serait plus pertinent de basculer cette VM dans le schéma synthese
car elle ne devrait être utilisé que par la vue synthese.syntheseff
.
9bbbe49
to
f1fa9bd
Compare
Je me demande si pour des questions de performance, et etant donnée que ce sont des données "stables", il ne serait pas plus simple d'avoir une table de précalcul de la correspondance entre sensibilité, niveau de diffusion. Que l'on pourrait ensuite utiliser dans l'atlas. CREATE TABLE gn_sensitivity.cor_diffusion_level_sensitivity AS
WITH sens AS (
SELECT id_nomenclature AS id_sens, cd_nomenclature AS cd_sens,
CASE
WHEN cd_nomenclature = '0' THEN '5'
ELSE cd_nomenclature
END AS cor_cd_diff,
cd_nomenclature::int AS order_sens
FROM ref_nomenclatures.t_nomenclatures AS tn
WHERE id_type = ref_nomenclatures.get_id_nomenclature_type('SENSIBILITE')
UNION
SELECT -1 AS id_sens, NULL AS cd_sens, NULL AS cor_cd_diff, 0 AS order_sens
) , diff AS (
SELECT id_nomenclature AS id_diff, cd_nomenclature AS cd_diff,
CASE
WHEN cd_nomenclature IN ('0', '5') THEN 0
ELSE cd_nomenclature::int
END AS order_diff
FROM ref_nomenclatures.t_nomenclatures AS tn
WHERE id_type = ref_nomenclatures.get_id_nomenclature_type('NIV_PRECIS')
UNION
SELECT -1 AS id_diff, NULL AS cd_diff, 0 AS order_diff
), d AS (
SELECT * , GREATEST(sens.order_sens, diff.order_diff) AS order_max,
CASE
WHEN GREATEST(sens.order_sens, diff.order_diff) = 0 THEN '5'
ELSE GREATEST(sens.order_sens, diff.order_diff)::varchar
END AS cd_max
FROM sens, diff
)
SELECT d.*, tn.id_nomenclature AS id_max
FROM d
JOIN ref_nomenclatures.t_nomenclatures AS tn
ON id_type = ref_nomenclatures.get_id_nomenclature_type('NIV_PRECIS') AND cd_nomenclature = cd_max; SELECT DISTINCT s.id_nomenclature_sensitivity , s.id_nomenclature_diffusion_level , cds.*
FROM gn_synthese.synthese AS s
JOIN gn_sensitivity.cor_diffusion_level_sensitivity cds
ON cds.id_sens = COALESCE(s.id_nomenclature_sensitivity, -1) AND cds.id_diff = COALESCE(s.id_nomenclature_diffusion_level, -1)
|
With pg_restore the search_path is not set to public. So, the error "geometry does not exist" is raised.
af5c0a5
to
b9d3a78
Compare
See #390.