Skip to content

Commit

Permalink
Merge pull request #568 from georchestra/issue_553
Browse files Browse the repository at this point in the history
Nouveau script de chargement des données
  • Loading branch information
MaelREBOUX authored Jul 6, 2021
2 parents f62a07d + 54505a0 commit 30c5723
Show file tree
Hide file tree
Showing 65 changed files with 3,380 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@

database/config.sh

.DS_Store
docs/_build/
docs/rsync.bash
cadastrapp/target/*
addons/cadastrapp/js/build/cadastrapp.js
database/test.sh
66 changes: 66 additions & 0 deletions database/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Alimentation de la base de données de cadastrapp

Ceci est la documentation des traitements qui mettent à jour la base de données applicative de cadastrapp.


## Principe de fonctionnement

Avant de configurer et jouer ce script, vous devez disposez d'une base de données PostgreSQL / PostGIS contenant des données cadastrales créées en utilisant le greffon **QGIS [cadastre](https://plugins.qgis.org/plugins/cadastre/)**

Cette base de données sera lue par le script qui va créer les tables et **[les vues matérialisées](https://www.postgresql.org/docs/current/sql-creatematerializedview.html)** dont cadastrapp a besoin pour fonctionner.

Le fichier de configuration du script vous permet de définir si les données cadastre QGIS sont dans la même base de données que les données cadastrapp ou pas, sur le même serveur ou pas.

L'utilisation des vues matérialisées permet de gagner du temps lors de la mise de vos données car un simple REFRESH ```MATERIALIZED VIEW table_name``` suffit à relire la base de données source.


## Prérequis

### Versions PostgreSQL et PostGIS

* un système linux type Debian 9 + ou Ubuntu 16+
* PostgreSQL > 9.6
* PostGIS > 2.1 mais < 3.0


### Si toutes les données sont dans la même base de données

C'est le cas le plus simple.

Dans ce cas il faut 2 schémas. Exemples :
* `cadastre_gis` : il contiendra les données cadastre produites par le plugin cadastre de QGIS
* `cadastrapp` : il contiendra les données applicatives pour cadastrapp et créées par notre script


### Si les données sont dans 2 bases de données distinctes

Dans ce cas on aura 2 bases de données différentes (sur la même machine ou pas) et donc 2 schémas différents. Exemples :
* `base_1.cadastre_gis` : il contiendra les données cadastre produites par le plugin cadastre de QGIS
* `base_2.cadastrapp` : il contiendra les données applicatives pour cadastrapp et créées par notre script

La base de données cible qui contiendra les données de cadastrapp devra comporter l'extension **[dblink](http://www.postgresql.org/docs/current//dblink.html)**.


## Configuration du script

Sous linux :
* aller dans le répertoire `database`
* dupliquer le fichier `config_sample.sh`
* le renommer en `config.sh`
* l'ouvrir et compléter les informations de connection aux bases de données
* si les données cadastre QGIS et cadastrapp sont dans la même base de données, laisser `uniqueDB=True` sinon mettre `uniqueDB=False`


## Utilisation du script

Sous linux :
* aller dans le répertoire `database`
* exécuter le script `cadastrapp_load_data.sh`


## Mise à jour des données

Sous linux :
* aller dans le répertoire `database`
* exécuter le script `cadastrapp_update_data.sh`

97 changes: 97 additions & 0 deletions database/cadastrapp_load_data.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#! /bin/bash


clear
git_version=$(git rev-parse HEAD)

echo "--------------------------------------------------------------"
echo " Cadastrapp : script de chargement des données"
echo "--------------------------------------------------------------"
echo ""
echo " version : $git_version"
echo ""
echo "--------------------------------------------------------------"
echo " Lecture du fichier de configuration"
echo "--------------------------------------------------------------"
echo ""

# lecture du fichier de configuration des connexions
. config.sh

if [ "$uniqueDB" = True ] ; then
echo " 1 seule base de données sera utilisée : $cadastrappDBName sur la machine $cadastrappDBHost"
echo " schéma des données cadastre QGIS : $qgisDBSchema"
echo " schéma des données cadastrapp : $cadastrappDBSchema"
elif [ "$uniqueDB" = False ] ; then
echo " 2 bases de données seront utilisées"
echo " host > db > schema"
echo " source QGIS : $qgisDBHost > $qgisDBName > $qgisDBSchema"
echo " cible cadastrapp : $cadastrappDBHost > $cadastrappDBName > $cadastrappDBSchema"
else
echo " pb de configuration : stop"
exit 1
fi

echo ""
read -p " Si ces infos sont exactes : appuyer sur la touche [Entrée] sinon faire ctrl + C pour arrêter."
echo ""


#
# cette fonction permet de remplacer les infos de connection
# avant exécution
#
replaceAndLaunch (){

if [ -z "$1" ] || [ ! -e $1 ] ; then
echo "Le fichier SQL $1 n'existe pas."
exit 1
else
echo " Exécution du fichier : $1"
fi

cat $1 | sed "{
s/#schema_cadastrapp/$cadastrappDBSchema/g
s/#user_cadastrapp/$cadastrappDBUser/g
s/#DBHost_qgis/$qgisDBHost/g
s/#DBPort_qgis/$qgisDBPort/g
s/#DBName_qgis/$qgisDBName/g
s/#DBSchema_qgis/$qgisDBSchema/g
s/#DBUser_qgis/$qgisDBUser/g
s/#DBpasswd_qgis/$qgisDBPassword/g
}" |\
PGPASSWORD=$cadastrappDBPassword psql -h $cadastrappDBHost -p $cadastrappDBPort -d $cadastrappDBName -U $cadastrappDBUser

}


# test de connection aux bases de données
# notamment que cadastrappDBUser puisse lire dans qgisDBSchema
# TODO

# on purge la BD cadastrapp existante
. purge_db.sh
#read -p " pause pour vérifier que la BD est bien vide"

# on recrée les tables
. create_tables.sh

# on remplit les tables
# les tables sont remplies à l'étape d'avant

# on recrée les vues
. create_views.sh

# on applique les commentaires
. create_comments.sh

# traitement à part pour les tables d'information foncière
. tables_request.sh

# on fait un bilan
# TODO

echo ""
echo "--------------------------------------------------------------"
echo " FIN "
echo "--------------------------------------------------------------"
82 changes: 82 additions & 0 deletions database/cadastrapp_update_data.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#! /bin/bash


clear
git_version=$(git rev-parse HEAD)

echo "--------------------------------------------------------------"
echo " Cadastrapp : script de mise à jour des données"
echo "--------------------------------------------------------------"
echo ""
echo " version : $git_version"
echo ""
echo "--------------------------------------------------------------"
echo " Lecture du fichier de configuration"
echo "--------------------------------------------------------------"
echo ""

# lecture du fichier de configuration des connexions
. config.sh

if [ "$uniqueDB" = True ] ; then
echo " 1 seule base de données sera utilisée : $cadastrappDBName sur la machine $cadastrappDBHost"
echo " schéma des données cadastre QGIS : $qgisDBSchema"
echo " schéma des données cadastrapp : $cadastrappDBSchema"
elif [ "$uniqueDB" = False ] ; then
echo " 2 bases de données seront utilisées"
echo " host > db > schema"
echo " source QGIS : $qgisDBHost > $qgisDBName > $qgisDBSchema"
echo " cible cadastrapp : $cadastrappDBHost > $cadastrappDBName > $cadastrappDBSchema"
else
echo " pb de configuration : stop"
exit 1
fi

echo ""
read -p " Si ces infos sont exactes : appuyer sur la touche [Entrée] sinon faire ctrl + C pour arrêter."
echo ""


#
# cette fonction permet de remplacer les infos de connection
# avant exécution
#
replaceAndLaunch (){

if [ -z "$1" ] || [ ! -e $1 ] ; then
echo "Le fichier SQL $1 n'existe pas."
exit 1
else
echo " Exécution du fichier : $1"
fi

cat $1 | sed "{
s/#schema_cadastrapp/$cadastrappDBSchema/g
s/#user_cadastrapp/$cadastrappDBUser/g
s/#DBHost_qgis/$qgisDBHost/g
s/#DBPort_qgis/$qgisDBPort/g
s/#DBName_qgis/$qgisDBName/g
s/#DBSchema_qgis/$qgisDBSchema/g
s/#DBUser_qgis/$qgisDBUser/g
s/#DBpasswd_qgis/$qgisDBPassword/g
}" |\
PGPASSWORD=$cadastrappDBPassword psql -h $cadastrappDBHost -p $cadastrappDBPort -d $cadastrappDBName -U $cadastrappDBUser

}


# test de connection aux bases de données
# notamment que cadastrappDBUser puisse lire dans qgisDBSchema
# TODO

# on met à jour les vues matérialisées
replaceAndLaunch sql/vues/_update.sql


# on fait un bilan
# TODO

echo ""
echo "--------------------------------------------------------------"
echo " FIN "
echo "--------------------------------------------------------------"
25 changes: 25 additions & 0 deletions database/config_sample.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#! /bin/bash

# fichier de configuration des infos de connexions
# aux bases de données

# BD cadastre QGIS (lecture)
qgisDBHost=localhost
qgisDBPort=5432
qgisDBName=bdu
qgisDBSchema=cadastre_qgis
qgisDBUser=cadastre_qgis_user
qgisDBPassword=cadastre_qgis_mdp

# BD cadastrapp (écriture)
cadastrappDBHost=localhost
cadastrappDBPort=5432
cadastrappDBName=georchestra
cadastrappDBSchema=cadastrapp
cadastrappDBUser=cadastrapp_user
cadastrappDBPassword=cadastrapp_mdp

# le schéma cadastrapp et le schéma cadastre_qgis sont dans la même base de données
# True / False
uniqueDB=True

26 changes: 26 additions & 0 deletions database/create_comments.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#! /bin/bash

# ce script va créer les commentaires sur les tables quand il en faut


echo "--------------------------------------------------------------"
echo " Création des commentaires sur les tables et les vues"
echo "--------------------------------------------------------------"
echo ""

# Création des commentaires

replaceAndLaunch sql/comments/Commune.sql
replaceAndLaunch sql/comments/Section.sql
replaceAndLaunch sql/comments/Parcelle.sql
replaceAndLaunch sql/comments/Proprietaire.sql
replaceAndLaunch sql/comments/CoProprieteParcelle.sql
replaceAndLaunch sql/comments/ProprietaireParcelle.sql
replaceAndLaunch sql/comments/ProprieteBatie.sql
replaceAndLaunch sql/comments/ProprieteNonBatie.sql
replaceAndLaunch sql/comments/ProprieteNonBatieSufExo.sql
replaceAndLaunch sql/comments/HabitationDetails.sql
replaceAndLaunch sql/comments/Lot.sql
replaceAndLaunch sql/comments/uf_parcelle.sql

echo " Fait"
26 changes: 26 additions & 0 deletions database/create_tables.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#! /bin/bash

# ce script va créer les tables


echo "--------------------------------------------------------------"
echo " Création des tables"
echo "--------------------------------------------------------------"
echo ""

# Création des tables

replaceAndLaunch sql/tables/prop_ccocac.sql
replaceAndLaunch sql/tables/prop_ccocac_simple.sql
replaceAndLaunch sql/tables/prop_ccodem.sql
replaceAndLaunch sql/tables/prop_ccodro.sql
replaceAndLaunch sql/tables/prop_ccoqua.sql
replaceAndLaunch sql/tables/prop_ccogrm.sql
replaceAndLaunch sql/tables/prop_dnatpr.sql
replaceAndLaunch sql/tables/prop_dmatto.sql
replaceAndLaunch sql/tables/prop_dmatgm.sql
replaceAndLaunch sql/tables/prop_type_filiation.sql
replaceAndLaunch sql/tables/prop_bati_detent.sql
replaceAndLaunch sql/tables/groupe_autorisation.sql

echo " Fait"
55 changes: 55 additions & 0 deletions database/create_views.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#! /bin/bash

# ce script va créer les vues matérialisées



echo "--------------------------------------------------------------"
echo " Création des vues matérialisées"
echo "--------------------------------------------------------------"
echo ""

if [ "$uniqueDB" = True ] ; then

replaceAndLaunch sql/vues/Commune.sql
replaceAndLaunch sql/vues/Section.sql
replaceAndLaunch sql/vues/Parcelle.sql
replaceAndLaunch sql/vues/Proprietaire.sql
replaceAndLaunch sql/vues/CoProprieteParcelle.sql
replaceAndLaunch sql/vues/ProprietaireParcelle.sql
replaceAndLaunch sql/vues/ProprieteBatie.sql
replaceAndLaunch sql/vues/ProprieteNonBatie.sql
replaceAndLaunch sql/vues/ProprieteNonBatieSufExo.sql
replaceAndLaunch sql/vues/HabitationDetails.sql
replaceAndLaunch sql/vues/Lot.sql
replaceAndLaunch sql/vues/uf_parcelle.sql

elif [ "$uniqueDB" = False ] ; then

replaceAndLaunch sql/vues_dblink/Commune.sql
replaceAndLaunch sql/vues_dblink/Section.sql
replaceAndLaunch sql/vues_dblink/Parcelle.sql
replaceAndLaunch sql/vues_dblink/Proprietaire.sql
replaceAndLaunch sql/vues_dblink/CoProprieteParcelle.sql
replaceAndLaunch sql/vues_dblink/ProprietaireParcelle.sql
replaceAndLaunch sql/vues_dblink/ProprieteBatie.sql
replaceAndLaunch sql/vues_dblink/ProprieteNonBatie.sql
replaceAndLaunch sql/vues_dblink/ProprieteNonBatieSufExo.sql
replaceAndLaunch sql/vues_dblink/HabitationDetails.sql
replaceAndLaunch sql/vues_dblink/Lot.sql
replaceAndLaunch sql/vues_dblink/uf_parcelle.sql

fi

echo " Fait"


echo "--------------------------------------------------------------"
echo " Création des indexes sur les vues matérialisées"
echo "--------------------------------------------------------------"
echo ""

replaceAndLaunch sql/indexes/indexes_vues_materialisees.sql

echo " Fait"

Loading

0 comments on commit 30c5723

Please sign in to comment.