Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
hub:dump [2017/03/28 10:16] anais.just@fcbn.fr [Procédure d'installation] |
hub:dump [2022/03/07 12:00] (Version actuelle) |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
===== Procédure d' | ===== Procédure d' | ||
- | 1- Création d'une bdd si_flore_national en local | + | ==== Création d'une bdd si_flore_national en local ==== |
< | < | ||
CREATE DATABASE si_flore_national | CREATE DATABASE si_flore_national | ||
Ligne 21: | Ligne 22: | ||
CREATE SCHEMA ref; | CREATE SCHEMA ref; | ||
CREATE SCHEMA agregation; | CREATE SCHEMA agregation; | ||
+ | CREATE EXTENSION postgis; | ||
</ | </ | ||
- | 2- Restauration | + | ==== Restauration |
* Restauration du schéma ref (siflore_ref.backup); | * Restauration du schéma ref (siflore_ref.backup); | ||
* Restauration du schéma agregation (siflore_agregation.backup); | * Restauration du schéma agregation (siflore_agregation.backup); | ||
+ | On peut le faire directement sous pgadmin avec un clic droit sur la base de données (" | ||
+ | ==== Restauration à partir de fichiers plats sql ==== | ||
+ | < | ||
+ | --SOUS WINDOWS (en ligne de commande cmd) | ||
+ | cd c:\Program Files\PostgreSQL\9.2\bin | ||
+ | psql -U postgres | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | psql -U postgres -p 5432 si_flore_national <" | ||
+ | </ | ||
+ | ===== Exploitation des données (au choix 1 ou 1bis)===== | ||
+ | |||
+ | ==== 0-CREATION DES FONCTIONS POUR LES LISTES DE TAXONS ==== | ||
+ | |||
+ | < | ||
+ | --Ou alors charger l' | ||
+ | |||
+ | |||
+ | --- Initiations de tables indispensables pour le fonctionement du hub | ||
+ | CREATE TABLE IF NOT EXISTS public.zz_log (lib_schema character varying, | ||
+ | CREATE TABLE IF NOT EXISTS public.bilan (uid integer NOT NULL, | ||
+ | DROP TABLE IF EXISTS twocol CASCADE; | ||
+ | DROP TABLE IF EXISTS threecol CASCADE; CREATE TABLE public.threecol (col1 varchar, col2 varchar, col3 varchar); | ||
+ | |||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --- Nom : hub_import_taxon | ||
+ | --- Description : Importer une liste de taxon dans un hub | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | CREATE OR REPLACE FUNCTION hub_import_taxon(libSchema varchar, path varchar, files varchar) RETURNS setof zz_log AS | ||
+ | $BODY$ | ||
+ | DECLARE out zz_log%rowtype; | ||
+ | BEGIN | ||
+ | --- Commande | ||
+ | CASE WHEN files <> '' | ||
+ | EXECUTE ' | ||
+ | EXECUTE 'COPY "' | ||
+ | out.lib_log := files||' | ||
+ | ELSE out.lib_log := ' | ||
+ | |||
+ | --- Output& | ||
+ | out.lib_schema := libSchema; | ||
+ | END; $BODY$ | ||
+ | |||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --- Nom : hub_txinfra | ||
+ | --- Description : Générer une table avec les taxon infra depuis la table zz_log_liste_taxon | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | CREATE OR REPLACE FUNCTION hub_txinfra(libSchema varchar, version_taxref integer = 7) RETURNS setof zz_log AS | ||
+ | $BODY$ | ||
+ | DECLARE out zz_log%rowtype; | ||
+ | DECLARE i varchar; | ||
+ | BEGIN | ||
+ | --- Commande | ||
+ | FOR i in EXECUTE ' | ||
+ | LOOP | ||
+ | EXECUTE | ||
+ | ' | ||
+ | select ''' | ||
+ | (WITH RECURSIVE hierarchie(cd_nom, | ||
+ | SELECT cd_nom, nom_complet, | ||
+ | FROM ref.taxref_v' | ||
+ | WHERE t1.cd_nom = ''' | ||
+ | UNION | ||
+ | SELECT t2.cd_nom, t2.nom_complet, | ||
+ | FROM ref.taxref_v' | ||
+ | JOIN hierarchie h ON t2.cd_taxsup = h.cd_nom | ||
+ | WHERE t2.cd_nom = t2.cd_ref | ||
+ | ) SELECT * FROM hierarchie) as foo'; | ||
+ | end loop; | ||
+ | EXECUTE ' | ||
+ | out.lib_log := 'Liste de sous taxons générée'; | ||
+ | |||
+ | --- Output& | ||
+ | out.lib_schema := libSchema; | ||
+ | END; $BODY$ | ||
+ | |||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --- Nom : hub_log | ||
+ | --- Description : ecrit les output dans le Log du schema et le log global | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | CREATE OR REPLACE FUNCTION hub_log (libSchema varchar, outp zz_log, action varchar = ' | ||
+ | $BODY$ | ||
+ | DECLARE exist integer; | ||
+ | BEGIN | ||
+ | |||
+ | /*ajout du user_log dans le zzlog*/ | ||
+ | EXECUTE ' | ||
+ | CASE WHEN exist IS NULL THEN | ||
+ | EXECUTE 'ALTER TABLE ' | ||
+ | ELSE END CASE; | ||
+ | |||
+ | CASE WHEN action = ' | ||
+ | EXECUTE ' | ||
+ | CASE WHEN libSchema <> ' | ||
+ | ELSE PERFORM 1; END CASE; | ||
+ | WHEN action = ' | ||
+ | EXECUTE ' | ||
+ | ELSE SELECT 1; | ||
+ | END CASE; | ||
+ | PERFORM hub_mail(outp.lib_schema, | ||
+ | END;$BODY$ LANGUAGE plpgsql; | ||
+ | |||
+ | |||
+ | |||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --- Nom : hub_mail | ||
+ | --- Description : Renseigne la table emailing_queue - infos transmises par mail à l' | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | --------------------------------------------------------------------------------------------------------- | ||
+ | CREATE OR REPLACE FUNCTION hub_mail (libSchema varchar, | ||
+ | $BODY$ | ||
+ | BEGIN | ||
+ | CASE WHEN action = ' | ||
+ | INSERT INTO emailing_queue (lib_schema, | ||
+ | ELSE END CASE; | ||
+ | END;$BODY$ LANGUAGE plpgsql; | ||
+ | </ | ||
+ | |||
+ | ==== 1- EXTRACTION POUR SEULEMENT QUELQUES ESPECES ==== | ||
+ | |||
+ | < | ||
+ | --On vide les listes | ||
+ | TRUNCATE agregation.zz_log_liste_taxon; | ||
+ | TRUNCATE agregation.zz_log_liste_taxon_et_infra; | ||
+ | |||
+ | -- On recréé une liste de taxons pour lesquelles on veut des données | ||
+ | INSERT INTO agregation.zz_log_liste_taxon (cd_ref, | ||
+ | select cd_ref, nom_valide from ref.taxref_v7 where cd_nom in (' | ||
+ | |||
+ | --Construction de la liste des infra-taxons | ||
+ | SELECT * FROM hub_txinfra(' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 1 bis-EXTRACTION à PARTIR D'UNE LISTE CSV ==== | ||
+ | |||
+ | < | ||
+ | --On vide les listes précédentes | ||
+ | TRUNCATE agregation.zz_log_liste_taxon; | ||
+ | TRUNCATE agregation.zz_log_liste_taxon_et_infra; | ||
+ | |||
+ | ----Import de la liste des taxons pour lesquelles on veut des données | ||
+ | COPY agregation.zz_log_liste_taxon FROM ' | ||
+ | --ou alors (attention la fonction est en encodage UTF8', delimiter ';' | ||
+ | -- select * from hub_import_taxon(' | ||
+ | |||
+ | --- Construction de la liste des taxons et leurs infra taxons | ||
+ | SELECT * FROM hub_txinfra(' | ||
+ | </ | ||
+ | ==== 2-DONNEES MANQUANTES? ==== | ||
+ | |||
+ | < | ||
+ | ---Vérification des taxons non présents dans taxref v7 et export de la liste de ces taxons dans un fichier texte | ||
+ | COPY ( | ||
+ | SELECT toto.* FROM | ||
+ | (SELECT zz.cd_ref AS code_initial, | ||
+ | FROM ref.taxref_v7 AS tx | ||
+ | RIGHT JOIN agregation.zz_log_liste_taxon AS zz ON tx.cd_ref = zz.cd_ref | ||
+ | WHERE tx.cd_ref is null) AS toto | ||
+ | LEFT join agregation.zz_log_liste_taxon ls | ||
+ | ON toto.code_initial= ls.cd_ref | ||
+ | ORDER BY toto.nom_initial | ||
+ | ) TO ' | ||
+ | |||
+ | </ | ||
+ | ==== 3-RECUPERATION DE TOUTES LES OBSERVATIONS POUR LA LISTE DEMANDEE ==== | ||
+ | |||
+ | < | ||
+ | ---Récuperation des observations par maille 10 pour tous les taxons de la liste + infra (si par maille 5 alors typ_geo=' | ||
+ | DROP TABLE IF EXISTS obs_maille10_taxons_demande ; | ||
+ | CREATE TABLE obs_maille10_taxons_demande | ||
+ | AS | ||
+ | SELECT t2.*, rel.date_debut, | ||
+ | FROM | ||
+ | ( | ||
+ | SELECT t1.cd_jdd, t1.cd_releve, | ||
+ | FROM | ||
+ | (SELECT obs.*, cd_geo, lib_geo | ||
+ | FROM agregation.observation obs | ||
+ | LEFT JOIN agregation.releve_territoire relt | ||
+ | ON obs.cd_jdd=relt.cd_jdd AND obs.cd_releve=relt.cd_releve | ||
+ | WHERE typ_geo=' | ||
+ | JOIN agregation.zz_log_liste_taxon_et_infra tx | ||
+ | ON t1.cd_ref = tx.cd_ref_cite | ||
+ | ) t2 | ||
+ | LEFT JOIN agregation.releve rel | ||
+ | ON t2.cd_jdd=rel.cd_jdd AND t2.cd_releve=rel.cd_releve | ||
+ | ORDER BY cd_ref_demande ASC; | ||
+ | |||
+ | --remarque: | ||
+ | </ | ||
+ | ==== 4-CALCUL DE SYNTHESES POUR LA LISTE DEMANDEE ==== | ||
+ | |||
+ | < | ||
+ | --Nombre de mailles par taxon après 1990 | ||
+ | --A partir de la table des observations précédemment calculée faire: | ||
+ | |||
+ | DROP TABLE IF EXISTS nbr_maille10_taxons_demande ; | ||
+ | CREATE TABLE nbr_maille10_taxons_demande | ||
+ | AS | ||
+ | SELECT cd_ref_demande, | ||
+ | FROM obs_maille10_taxons_demande | ||
+ | WHERE date_debut>' | ||
+ | GROUP BY cd_ref_demande, | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | --Carte de répartition des taxons | ||
+ | --A partir de la table des observations précédemment calculée faire: | ||
+ | |||
+ | DROP TABLE IF EXISTS repartition_maille10_taxons_demande ; | ||
+ | CREATE TABLE repartition_maille10_taxons_demande | ||
+ | AS | ||
+ | SELECT cd_ref_demande, | ||
+ | FROM obs_maille10_taxons_demande | ||
+ | INNER JOIN ref.geo_maille10 on cd_geo=cd_sig | ||
+ | WHERE date_debut>' | ||
+ | GROUP BY cd_ref_demande, | ||
+ | |||
+ | -- Pour voir le résultat | ||
+ | -- select * from repartition_maille10_taxons_demande; | ||
+ | -- Ou alors visualiser dans QGIS en utilisant un connecteur à la base de données postgis | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | ---Nombre d' | ||
+ | |||
+ | copy ( | ||
+ | SELECT i.nom_valide_demande, | ||
+ | FROM agregation.observation a | ||
+ | JOIN agregation.zz_log_liste_taxon_et_infra i on a.cd_ref = i.cd_ref_cite | ||
+ | JOIN agregation.releve z ON a.cd_releve = z.cd_releve AND a.cd_jdd = z.cd_jdd | ||
+ | JOIN agregation.releve_territoire e ON a.cd_releve = e.cd_releve AND a.cd_jdd = e.cd_jdd | ||
+ | JOIN agregation.releve_acteur r ON a.cd_releve = r.cd_releve AND a.cd_jdd = r.cd_jdd | ||
+ | WHERE typ_geo = ' | ||
+ | GROUP BY cd_geo, i.nom_valide_demande, | ||
+ | to ' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | ---Nombre d' | ||
+ | |||
+ | copy ( | ||
+ | SELECT i.nom_valide_demande, | ||
+ | FROM agregation.observation a | ||
+ | JOIN agregation.zz_log_liste_taxon_et_infra i on a.cd_ref = i.cd_ref_cite | ||
+ | JOIN agregation.releve z ON a.cd_releve = z.cd_releve AND a.cd_jdd = z.cd_jdd | ||
+ | JOIN agregation.releve_territoire e ON a.cd_releve = e.cd_releve AND a.cd_jdd = e.cd_jdd | ||
+ | JOIN agregation.releve_acteur r ON a.cd_releve = r.cd_releve AND a.cd_jdd = r.cd_jdd | ||
+ | WHERE typ_geo = ' | ||
+ | GROUP BY cd_geo, i.nom_valide_demande, | ||
+ | to ' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
- | ===== Exploitation des données ===== | ||