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

Installation de la base de données geonatureatlas 1.5.1 fait planter postgresql #462

Closed
juliettefabre opened this issue Jan 17, 2023 · 19 comments

Comments

@juliettefabre
Copy link

Bonjour,

Je n'arrive pas à installer totalement la base de données geonatureatlas.

  • version : 1.5.1
  • debian 11 bullseye
  • 4Go de RAM
  • 40Go d'espace
  • J'utllise la BDD GeoNature2, installée sur le même serveur.

Dans la configuration :

geonature_source=true 
use_ref_geo_gn2=true
$ ./install_db.sh
Checking the validity of settings.ini
14:14:14
Creating DB...
Adding postGIS and  pgSQL to DB
Adding FDW and connection to the GeoNature parent DB
Creating FDW from GN2
Creation of geographic tables from the ref_geo schema of the geonature database
Creating the connection to GeoNature for the taxonomy
Creating DB structure
----- Creating materialized views ------
[14:15:04] Creating atlas.vm_taxref...
[14:15:14] Passed - Duration : 0m10s
[14:15:14] Creating atlas.vm_observations...
[14:15:15] Passed - Duration : 0m1s
[14:15:15] Creating atlas.vm_taxons...
[14:15:15] Passed - Duration : 0m0s
[14:15:15] Creating atlas.vm_altitudes...
[14:15:15] Passed - Duration : 0m0s
[14:15:15] Creating atlas.vm_search_taxon...
[14:15:17] Passed - Duration : 0m2s
[14:15:17] Creating atlas.vm_mois...
[14:15:17] Passed - Duration : 0m0s
[14:15:17] Creating atlas.vm_communes...
[14:16:15] Passed - Duration : 0m58s
[14:16:15] Creating atlas.vm_medias
[14:16:15] Passed - Duration : 0m0s
[14:16:15] Creating atlas.vm_cor_taxon_attribut...
[14:16:15] Passed - Duration : 0m0s
[14:16:15] Creating atlas.vm_taxons_plus_observes...
[14:16:15] Passed - Duration : 0m0s
[14:16:15] Creating atlas.vm_cor_taxon_organism...
[14:16:15] Passed - Duration : 0m0s
[14:16:15] Creating atlas.t_mailles_territoire...
[14:16:15] Passed - Duration : 0m0s
[14:16:15] Creating atlas.vm_observations_mailles...
[14:16:15] Passed - Duration : 0m0s
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Grant...
Cleaning files...
Install finished - Duration :2m2s

Postgresql crashe, et il semblerait que l'installation plante sur le vm_communes, car les vues matérialisées précédentes sont bien créées dans la BDD geonatureatlas, mais ni vm_communes, ni les suivantes.

Je reteste en désactivant certaines communes de geonature2db comme indiqué dans la documentation :

UPDATE ref_geo.l_areas set enable = false where id_area NOT in (
select a.id_area from ref_geo.l_areas a
join ref_geo.li_municipalities m ON a.id_area = m.id_area
where insee_dep in ('34'))

Il ne me reste qu'environ 300 entités dans ref_geo.l_areas .

Je relance, mais cela ne change rien, l'installation se déroule exactement de la même manière.

Par ailleurs, quand je relance des installations, je suis obligée de supprimer manuellement la BDD geonatureatlas car elle est encore en cours d'accès.

sudo su - postgres
psql
postgres=# drop database geonatureatlas;
ERROR:  database "geonatureatlas" is being accessed by other users
DETAIL:  There are 2 other sessions using the database.
postgres=# SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'geonatureatlas' AND pid <> pg_backend_pid();
postgres=# drop database geonatureatlas;

Des pistes ?
Merci !

@TheoLechemia
Copy link
Member

TheoLechemia commented Jan 18, 2023

Bonjour,

Bizarre bizarre ..
Effectivement il semblerait que ce soit postgres qui plante au milieu de l'installation..
De ce que je vois, tu n'as pas énormément de données vu les temps d’exécution. C'est bien le cas ?
As tu regardé les logs de postgres ? Et aussi ceux de GeoNature : log/install_db.log du dossier atlas.
Peut tu nous fournir ton settings.ini également ?

Pour la suppression manuel, soit tu as un client connecté sur ta base, soit c'est l'installation en plantant qui ne libère pas sa connection ?

@juliettefabre
Copy link
Author

juliettefabre commented Jan 19, 2023

Merci Théo,
C'est bien sur la création de vm_communes que postgres crashe, pourtant j'ai allégé un maximum la table l_areas qui ne contient que 342 entités activées.
On va essayer avec une VM plus grosse, sachant que je n'arrive pas non plus à importer la BD alti lors de l'installation de GeoNature.
Je vous dirai si ça va mieux après !

@jpm-cbna
Copy link
Contributor

Il faudrait surveiller l'utilisation de la mémoire de la machine pendant l’installation. 4Go de mémoire, c'est peut être limite. Pour cela, il est possible d'utiliser htop (sudo apt install htop).
Il se peut que le maximum de mémoire soit atteint pendant l'installation. Dans ce cas là, Linux (via "OOM-killer") va stopper le processus qui en consomme le plus... Je pense qu'il doit être possible de trouver une référence à "OOM-killer" dans les fichiers de log du système, par exemple dans /var/log/syslog.

@juliettefabre
Copy link
Author

Il faudrait surveiller l'utilisation de la mémoire de la machine pendant l’installation. 4Go de mémoire, c'est peut être limite. Pour cela, il est possible d'utiliser htop (sudo apt install htop). Il se peut que le maximum de mémoire soit atteint pendant l'installation. Dans ce cas là, Linux (via "OOM-killer") va stopper le processus qui en consomme le plus... Je pense qu'il doit être possible de trouver une référence à "OOM-killer" dans les fichiers de log du système, par exemple dans /var/log/syslog.

Merci, je vais essayer avec 8 Go de RAM, mais j'ai des galères de création de VM pour le moment :)

@mvergez
Copy link
Contributor

mvergez commented Jan 23, 2023

Salut Juliette,
Pour info nous installons des atlas sur des VM à 4Go, donc ça devrait passer. Mais oui essaie quand même avec 8Go.
C'est étrange que postgres crash, ça nous ait jamais arrivé... Tu dois redémarrer le service postgres ensuite ? Ou juste la commande psql suffit ?

Peux-tu faire les vérifications suivantes :

  • Pour être sûr et certain : As-tu vérifié que tu avais bien qu'un seul postgres d'installé et qu'il tourne bien sur le port 5432 (ls /etc/postgresql) ? (normalement oui parce que tu crées bien les vues matérialisées mais bon...).
  • Tu n'as pas ouvert les ports de ta base de données vers l'extérieur avec pg_hba.conf ?
  • Tu as bien renseigné les bons noms d'utilisateurs avec les bons mots de passe dans settings.ini ?
  • Comme a dit @TheoLechemia : les logs de log/install_db.log aident bien pour débugger, tu as des entrées dedans ?
  • Tu peux tenter de lancer cette requête avec psql : SELECT pid, query, state FROM pg_stat_activity; voire SELECT * FROM pg_stat_activity; (pour plus de détails) après l'installation pour voir les requêtes qui sont en cours et qui bloquerait la suppression de ta base de données.

Tiens nous au courant !
Bon courage

@juliettefabre
Copy link
Author

Il faudrait surveiller l'utilisation de la mémoire de la machine pendant l’installation. 4Go de mémoire, c'est peut être limite. Pour cela, il est possible d'utiliser htop (sudo apt install htop). Il se peut que le maximum de mémoire soit atteint pendant l'installation. Dans ce cas là, Linux (via "OOM-killer") va stopper le processus qui en consomme le plus... Je pense qu'il doit être possible de trouver une référence à "OOM-killer" dans les fichiers de log du système, par exemple dans /var/log/syslog.

Bonjour,
J'ai lancé le htop pendant l'installation. Effectivement au moment de la création de vm_communes ça monte à 100% de CPU, et postgres est tué:

$ tail -f /var/log/syslog
Jan 23 09:40:06 oreme-geonature kernel: [3277868.177499] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/system-postgresql.slice/[email protected],task=postgres,pid=251106,uid=109
Jan 23 09:40:06 oreme-geonature kernel: [3277868.179891] Out of memory: Killed process 251106 (postgres) total-vm:2905984kB, anon-rss:2670228kB, file-rss:0kB, shmem-rss:28644kB, UID:109 pgtables:5476kB oom_score_adj:0
Jan 23 09:40:06 oreme-geonature systemd[1]: [email protected]: A process of this unit has been killed by the OOM killer.
Jan 23 09:40:06 oreme-geonature systemd[1]: session-6549.scope: Succeeded.
Jan 23 09:40:06 oreme-geonature systemd[1]: Started Session 6552 of user debian.
Jan 23 09:40:06 oreme-geonature systemd[1]: [email protected]: Failed with result 'oom-kill'.
Jan 23 09:40:06 oreme-geonature systemd[1]: [email protected]: Consumed 3min 23.881s CPU time.

@mvergez
Copy link
Contributor

mvergez commented Jan 23, 2023

Cela voudrait dire que si tu lances ça (https://github.com/PnX-SI/GeoNature-atlas/blob/master/data/atlas/7.atlas.vm_communes.sql) :

SELECT c.insee,
c.commune_maj,
c.the_geom,
st_asgeojson(st_transform(c.the_geom, 4326)) as commune_geojson
FROM atlas.l_communes c
JOIN atlas.t_layer_territoire t ON ST_CONTAINS(ST_BUFFER(t.the_geom,200), c.the_geom);

Postgres plante ?

@juliettefabre
Copy link
Author

C'est étrange que postgres crash, ça nous ait jamais arrivé... Tu dois redémarrer le service postgres ensuite ? Ou juste la commande psql suffit ?
Oui je dois redémarrer postgresql.

Peux-tu faire les vérifications suivantes :

* Pour être sûr et certain : As-tu vérifié que tu avais bien qu'un seul postgres d'installé et qu'il tourne bien sur le port 5432 (`ls /etc/postgresql`) ? (normalement oui parce que tu crées bien les vues matérialisées mais bon...).

Oui

* Tu n'as pas ouvert les ports de ta base de données vers l'extérieur avec `pg_hba.conf` ?

Non :)

* Tu as bien renseigné les bons noms d'utilisateurs avec les bons mots de passe dans `settings.ini` ?

A priori :)

* Comme a dit @TheoLechemia : les logs de `log/install_db.log` aident bien pour débugger, tu as des entrées dedans ?

Yes:

ERROR:  role "geonatatlasadmin" already exists
ERROR:  role "geonatatlas" already exists
CREATE EXTENSION
NOTICE:  extension "plpgsql" already exists, skipping
COMMENT
CREATE EXTENSION
CREATE EXTENSION
CREATE SERVER
ALTER SERVER
CREATE USER MAPPING
CREATE SCHEMA
CREATE SCHEMA
CREATE SCHEMA
CREATE SCHEMA
CREATE SCHEMA
--------------------
Creating FDW from GN2
--------------------
IMPORT FOREIGN SCHEMA
psql:data/gn2/atlas_gn2.sql:9: NOTICE:  schema "ref_geo" does not exist, skipping
DROP SCHEMA
CREATE SCHEMA
IMPORT FOREIGN SCHEMA
IMPORT FOREIGN SCHEMA
IMPORT FOREIGN SCHEMA
IMPORT FOREIGN SCHEMA
--------------------
Creation of layers table from ref_geo of geonaturedb
--------------------
psql:data/gn2/atlas_ref_geo.sql:11: NOTICE:  view atlas.l_communes does not exist
DO
SELECT 342
CREATE INDEX
CREATE INDEX
psql:data/gn2/atlas_ref_geo.sql:47: NOTICE:  view atlas.t_mailles_territoire does not exist
DO
psql:data/gn2/atlas_ref_geo.sql:60: NOTICE:  view atlas.t_layer_territoire does not exist
DO
SELECT 1
CREATE INDEX
CREATE INDEX
CREATE FUNCTION
psql:/tmp/atlas/atlas_ref_taxonomie.sql:7: NOTICE:  schema "taxonomie" already exists, skipping
CREATE SCHEMA
IMPORT FOREIGN SCHEMA
ALTER TABLE
GRANT
ALTER TABLE
GRANT
ALTER TABLE
GRANT
CREATE VIEW
SELECT 657609
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
SELECT 0
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
SELECT 0
CREATE INDEX
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
UPDATE 8
CREATE FUNCTION
psql:/tmp/atlas/4.atlas.vm_altitudes.sql:74: NOTICE:  materialized view "vm_altitudes" does not exist, skipping
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       create_vm_altitudes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 CREATE materialized view atlas.vm_altitudes AS WITH alt1 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue <499 GROUP BY cd_ref) ,alt2 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 500 AND 999 GROUP BY cd_ref),alt3 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 1000 AND 1499 GROUP BY cd_ref),alt4 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 1500 AND 1999 GROUP BY cd_ref),alt5 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 2000 AND 2499 GROUP BY cd_ref),alt6 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 2500 AND 2999 GROUP BY cd_ref),alt7 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 3000 AND 3499 GROUP BY cd_ref),alt8 AS (SELECT cd_ref, count(*) as nb FROM atlas.vm_observations WHERE altitude_retenue BETWEEN 3500 AND 3999 GROUP BY cd_ref) SELECT DISTINCT o.cd_ref,COALESCE(a1.nb::integer, 0) as _0_500,COALESCE(a2.nb::integer, 0) as _500_1000,COALESCE(a3.nb::integer, 0) as _1000_1500,COALESCE(a4.nb::integer, 0) as _1500_2000,COALESCE(a5.nb::integer, 0) as _2000_2500,COALESCE(a6.nb::integer, 0) as _2500_3000,COALESCE(a7.nb::integer, 0) as _3000_3500,COALESCE(a8.nb::integer, 0) as _3500_4000 FROM atlas.vm_observations o LEFT JOIN alt1 a1 ON a1.cd_ref = o.cd_ref LEFT JOIN alt2 a2 ON a2.cd_ref = o.cd_ref LEFT JOIN alt3 a3 ON a3.cd_ref = o.cd_ref LEFT JOIN alt4 a4 ON a4.cd_ref = o.cd_ref LEFT JOIN alt5 a5 ON a5.cd_ref = o.cd_ref LEFT JOIN alt6 a6 ON a6.cd_ref = o.cd_ref LEFT JOIN alt7 a7 ON a7.cd_ref = o.cd_ref LEFT JOIN alt8 a8 ON a8.cd_ref = o.cd_ref WHERE o.cd_ref is not null ORDER BY o.cd_ref;
(1 ligne)

SELECT 0
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
SELECT 0
CREATE INDEX
psql:/tmp/atlas/7.atlas.vm_communes.sql:9: erreur SYSCALL SSL : EOF détecté
psql:/tmp/atlas/7.atlas.vm_communes.sql:9: fatal : la connexion au serveur a été perdue
psql: erreur : FATAL:  the database system is shutting down
FATAL:  the database system is shutting down
* Tu peux tenter de lancer cette requête avec psql : `SELECT pid, query, state FROM pg_stat_activity;` voire `SELECT * FROM pg_stat_activity;` (pour plus de détails) après l'installation pour voir les requêtes qui sont en cours et qui bloquerait la suppression de ta base de données.

Bizarrement je n'ai pas eu ce souci ce matin !

La requête de création de vm_communes n'aboutit pas quand je la lance depuis DBeaver. J'ai l'impression que le souci vient de la vue matérialisée t_layer_territoire, qui est hyper longue à requêter.

Je pense que ma configuration ne va pas, je vous joins mon fichier settings.ini.

#############################
### Données GEOGRAPHIQUES ###
#############################

########### Si ref_geo = true ############

# Voir la colonne type_code de la table ref_geo.bib_areas_type
# Indiquer le code des entités géographiques du ref_geo qui correspondent respectivement aux mailles et aux limites de votre territoire
# Les données doivent préalablement être présentes dans le ref_geo
type_maille="'M5'"
type_territoire="'REG'"

Mon territoire est la France entière. J'ai donc défini limites = les régions. mais je n'ai peut-être pas compris commet ces paramètres marchent ?

Si, pour tester, je veux restreindre le territoire au département de l'Hérault par exemple ou à la région Occitanie, comment dois-je configurer ces paramètres, et comment dois-je modifier la table l_areas ?

settings.txt

@juliettefabre
Copy link
Author

Cela voudrait dire que si tu lances ça (https://github.com/PnX-SI/GeoNature-atlas/blob/master/data/atlas/7.atlas.vm_communes.sql) :

SELECT c.insee,
c.commune_maj,
c.the_geom,
st_asgeojson(st_transform(c.the_geom, 4326)) as commune_geojson
FROM atlas.l_communes c
JOIN atlas.t_layer_territoire t ON ST_CONTAINS(ST_BUFFER(t.the_geom,200), c.the_geom);

Postgres plante ?

Tout à fait ! Plus que ne pas aboutir, ça plante :)

@camillemonchicourt
Copy link
Member

Type_territoire c'est pour définir un type de zonage dans le ref_geo qui correspond au zonage de ton territoire.
Ce type doit correspondre à un type qui n'a qu'un seul objet dans la table l_areas. Cette géométrie est égale au polygone de ton territoire.

Donc tu peux te créer un type "FRANCE" par exemple.
Ajouter dans l_areas le polygone correspondant et ça devrait mieux fonctionner.

Mais cela requestionne la pertinence et la complexité d'intersecter les données avec un zonage du territoire complet du projet.
Ce n'est pas essentiel et complique et alourdit l'installation.
On a souvent évoqué l'intérêt de ne pas faire cette intersection par défaut.

@mvergez
Copy link
Contributor

mvergez commented Jan 23, 2023

Ah oui, la France entière c'est très lourd pour un territoire...

Quand tu mets type_territoire="'REG'" j'ai l'impression que maintenant il prends toute les régions :

CREATE MATERIALIZED VIEW atlas.t_layer_territoire AS
WITH d AS (
SELECT st_union(geom) , b.type_name
FROM ref_geo.l_areas l
JOIN ref_geo.bib_areas_types b USING(id_type)
WHERE REPLACE(b.type_code, ' ', '_') = :type_territoire
GROUP BY b.type_name
)
SELECT
1::int as gid,
type_name as nom,
st_area(st_union)/10000 as surf_ha,
st_area(st_union)/1000000 as surf_km2,
ST_Perimeter(st_union)/1000 as perim_km,
st_transform(st_union, 4326) as the_geom
FROM d;
.

Comme dit @camillemonchicourt, pour la France entière, essaie aussi de simplifier un peu la géométrie de la France (car trop de détail sur la géométrie pourrait poser problème). Crée un nouveau type de territoire dans bib_areas_types : "FRANCE" et fais le lien avec le territoire ajouté dans l_areas avec l'id_type

@camillemonchicourt
Copy link
Member

Je pense que c'est normal que ça plante si tu as mis les Régions comme territoire et que tu as toutes les régions de France.
Il essaie d'intersecter avec plusieurs objets (toutes les régions) sur lesquelles il faut des buffers, et ça doit pas lui plaire du tout. 😀

@camillemonchicourt
Copy link
Member

Je sais pas si c'est lourd d'utiliser la France entière.
Si tu veux toutes les communes de France, certainement.

Mais là le soucis je pense est que le territoire est composé de la somme des régions bufferises et ça ça doit bloquer, peu importe le volume.

Dans tous les cas, le faire d'intersecter tout ça n'a aucun intérêt pour ton cas et complique et alourdit l'installation.

@juliettefabre
Copy link
Author

juliettefabre commented Jan 23, 2023

Quand tu mets type_territoire="'REG'" j'ai l'impression que maintenant il prends toute les régions :

CREATE MATERIALIZED VIEW atlas.t_layer_territoire AS
WITH d AS (
SELECT st_union(geom) , b.type_name
FROM ref_geo.l_areas l
JOIN ref_geo.bib_areas_types b USING(id_type)
WHERE REPLACE(b.type_code, ' ', '_') = :type_territoire
GROUP BY b.type_name
)
SELECT
1::int as gid,
type_name as nom,
st_area(st_union)/10000 as surf_ha,
st_area(st_union)/1000000 as surf_km2,
ST_Perimeter(st_union)/1000 as perim_km,
st_transform(st_union, 4326) as the_geom
FROM d;

OK, mais je vois aussi que la requête de création de t_layer_territoire ne sélectionne pas les l_areas qui ont enable = true.

Pourtant dans le fichier settings.ini, il est écrit :

Attention si use_ref_geo_gn2=true. Par défaut le ref_geo contient l'ensemble des communes de France, ce qui ralentit fortement l'installation lorsqu'on construit la vue matérialisée vm_communes (qui intersecte les communes avec les limites du territoire).
Pour accélérer l'installation, vous pouvez "désactiver" certaines communes du ref_geo, dont vous ne vous servez pas. Voir l'exemple de requête ci-dessous :

UPDATE ref_geo.l_areas set enable = false where id_type = 25 AND id_area NOT in (
select a.id_area from ref_geo.l_areas a
join ref_geo.li_municipalities m ON a.id_area = m.id_area
where insee_dep in ('MON_CODE_DEPARTEMENT', 'MON_CODE_DEPARTEMENT_BIS')
)

J'avais donc désactivé un maximum de communes, pensant que cela accélérerait la création de vm_communes, mais visiblement non ?

En tous cas, on a trouvé la cause, merci !

Je vais me limiter à la région Occitanie, ou au département de l'Hérault. Est-ce que je peux faire ça facilement et comment du coup ?

Merci !

@juliettefabre
Copy link
Author

J'avais donc désactivé un maximum de communes, pensant que cela accélérerait la création de vm_communes, mais visiblement non ?

Ok en fait je vois que cela impacte la vue matérialisée atlas.l_communes. Donc la création de la vue matérialisée vm_communes.
Mais ça ne suffit pas.

@juliettefabre
Copy link
Author

juliettefabre commented Jan 23, 2023

Je vais me limiter à la région Occitanie, ou au département de l'Hérault. Est-ce que je peux faire ça facilement et comment du coup ?

J'ai procédé ainsi dans geonature2db :

  • créé un type "Occitanie" dans ref_geo.bib_areas_type
  • dupliqué l'entité qui correspond à la région Occitanie dans ref_geo.l_areas en y associant le id_type créé précédemment.

L'installation de la BDD a abouti ! :D

Il faudrait sans doute clarifier tout ça dans la documentation car ce n'est pas trivial pour moi !

@camillemonchicourt
Copy link
Member

Oui voila, il faut un type correspondant à un type de zonage qui n'a qu'un seule objet associé, correspondant au territoire.

Oui c'est clairement à clarifier, ce que j'avais commencé ici : #220 (comment)

Mais surtout à simplifier, pour ne pas faire d'intersection avec le territoire par défaut, car ça a peu de sens dans la plupart des cas, et c'est complexe et lourd.

@juliettefabre
Copy link
Author

juliettefabre commented Jan 23, 2023

Oui c'est clairement à clarifier, ce que j'avais commencé ici : #220 (comment)

Je m'aperçois que dans bib_areas_types, la plupart des types n'ont aucune entité dans l_areas. Finalement, dans l_areas, on a uniquement des communes, départements, régions, et mailles. Quel est l'intérêt de tous les autres types ?

Tu dis dans ce commentaire "Pour créer votre territoire dans le ref_geo, il faut commencer par ajouter un type de zonage dans la table ref_geo.bib_areas_types si aucun des types existants ne correspond à votre territoire".
Est-ce qu'il y a des cas où les types existants correspondent aux besoins ? Car tu dis aussi que le type de territoire choisi dans la configuration ne doit comporter qu'un seul objet dans l_areas. Ca n'est le cas pour aucun des types existants.

Si je comprends bien, on est donc obligé de créer un type, ainsi que l'entité correspondante dans l_area ... C'est ça qui doit être bien clair dans la doc je pense (ainsi que la manière de le faire).

Par ailleurs, ça vaudrait le coup de rajouter de base le type France et l'entité correspondante dans l_areas.

@jpm-cbna
Copy link
Contributor

Juste pour info, dans le cas où l'on doit gérer un atlas avec un territoire de taille conséquente (France ou région) et un nombre important d'observations (plusieurs millions), il est possible d'utiliser la PR #402 pour accélérer considérablement la génération des VM liées au territoire.

Cela permet de passer de plusieurs heures d'attente à moins de 15mn...

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

5 participants