You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[ ] d'un cluster PostgreSQL (15 en l'occurrence mais ça doit fonctionner avec des versions plus anciennes) sur le port `54352`
60
+
-[ ] d'une base de données que j'ai appelée `osm_ferrargis`
61
+
-[ ] sur laquelle j'ai activé les extensions `postgis` et `hstore`
62
+
-[ ] à laquelle je me connecte de façon sécurisée à l'aide des fichiers `~/.pgpass` et `~/.pg_service.conf` dont je mets ci-dessous une idée de ce qu'il y a dedans :
62
63
63
-
Afin d'importer les données OpenStreetMap dans PostgreSQL, on va devoir utiliser [osm2pgsql](/?q=osm2pgsql*) qui est un outil en ligne de commande maintenu par la communauté OSM. Pour l'installation, rien de plus simple.
64
-
65
-
Sur Debian et dérivés comme Ubuntu :
66
-
67
-
```sh
68
-
sudo apt install osm2pgsql
69
-
```
70
-
71
-
Sur Windows, le [tutoriel de LearnOSM](https://learnosm.org/en/osm-data/osm2pgsql/) est très bien !
72
-
73
-
- Oui, une question Joséphine ?
74
-
- Monsieur, il est en anglais votre tuto et dans plein d'autres langues sauf en Français !
75
-
- Mon ange, c'est une excellente remarque que vous faites là ! C'est justement l'occasion de vous proposer pour contribuer à la traduction de ce merveilleux support !
76
-
- Ah ouais, bonne idée, ça me fera un bon exercice pour travailler la [version en anglais](https://www.edulide.fr/blog/reussir-version-anglais/) !
77
-
78
-
[Faites chauffer DeepL et Transifex pour contribuer à LearnOSM :fontawesome-solid-language:](https://learnosm.org/en/contribute/translator/){: .md-button }
Installer PostgreSQL n'a rien de sorcier, tant le travail de packaging et de distribution est remarquablement réalisé et documenté, comme en témoigne [la page de téléchargement](https://www.postgresql.org/download/). Mais c'est toujours bon de se noter les commandes à utiliser pour installer les versions depuis les dépôts communautaires.
86
-
87
-
Par exemple, sur les distributions Linux comme Ubuntu :
Le truc avec le packaging de PostgreSQL sur Debian et Ubuntu c'est que les scripts de post-installation créent par défaut un cluster `main`. C'est sympa de faire une partie du taf mais ce serait plus correct de demander avant quand même, en plus, le cluster est même pas optimisé !
101
-
Quand je fais installer un four en terre chez moi, je ne m'attends pas à ce que l'artisan me fasse une calzone mal cuite juste après la dernière pierre posée ! :pizza:
102
-
103
-
#### Création d'un cluster optimisé
104
-
105
-
C'est parti pour la création d'un cluster aux ~~petits oignons~~ petites olives ! On commence par lister les versions installées et les ports respectifs :
Ver Cluster Port Status Owner Data directory Log file
118
-
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
119
-
14 main 54342 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
120
-
```
121
-
122
-
L'objectif est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)).
123
-
124
-
Pour cela, on va s'appuyer sur deux éléments :
125
-
126
-
- la [documentation d'osm2pgsql](https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server) qui recommande des paramètres de configuration
127
-
- les outils comme [PGTune](https://pgtune.leopard.in.ua/) qui permettent de générer une configuration selon les capacités de la machine et le type d'application
C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent. Notez que je réduis certains paramètres pour garder la main sur mon interface graphique et qu'en cas de valeurs différentes entre PGTune et osm2pgsql, j'ai choisi de donner la priorité à ce dernier :
132
-
133
-
```bash title="Commande multi-ligne pour créer un cluster PostgreSQL"
Les fichiers de ce système de bases de données appartiendront à l'utilisateur « postgres ».
168
-
Le processus serveur doit également lui appartenir.
169
-
170
-
L'instance sera initialisée avec les locales
171
-
COLLATE: fr_FR.UTF-8
172
-
CTYPE: fr_FR.UTF-8
173
-
MESSAGES: C
174
-
MONETARY: fr_FR.UTF-8
175
-
NUMERIC: fr_FR.UTF-8
176
-
TIME: fr_FR.UTF-8
177
-
L'encodage par défaut des bases de données a été configuré en conséquence
178
-
avec « UTF8 ».
179
-
La configuration de la recherche plein texte a été initialisée à « french ».
180
-
181
-
Les sommes de contrôle des pages de données sont activées.
182
-
183
-
correction des droits sur le répertoire existant /var/lib/postgresql/14/ferrargis... ok
184
-
création des sous-répertoires... ok
185
-
sélection de l'implémentation de la mémoire partagée dynamique...posix
186
-
sélection de la valeur par défaut pour max_connections... 100
187
-
sélection de la valeur par défaut pour shared_buffers... 128MB
188
-
sélection du fuseau horaire par défaut... Europe/Paris
189
-
création des fichiers de configuration... ok
190
-
lancement du script bootstrap...ok
191
-
exécution de l'initialisation après bootstrap... ok
192
-
synchronisation des données sur disque... ok
193
-
Ver Cluster Port Status Owner Data directory Log file
194
-
14 ferrargis 54342 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log
195
-
```
196
-
<!-- markdownlint-enable MD046 -->
197
-
198
-
Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction SQL `ALTER SYSTEM`, soit en éditant le `postgresql.conf` :
!!! tip "Astuce pour avoir une Calzone réussie à chaque installation"
215
-
Il est possible de changer le comportement des scripts de post-installation du packaging PostgreSQL en modifiant le fichier `/etc/postgresql-common/createcluster.conf`, soit pour désactiver la création automatisée du cluster `main`, soit pour en modifier les paramètres par défaut (par exemple avec `initdb_options = '--data-checksums --lc-messages=C'`).
68
+
Et cette section dans mon fichier `~/.pg`
216
69
217
-
#### Créer le rôle et gérer l'accès
218
-
219
-
Comme on travaille à la maison, on va se faciliter la vie et créer un rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) :
De façon à ne pas stocker de mot de passe en clair dans les applications clientes comme QGIS et pour se faciliter la vie, on se crée un fichier `.pgpass` dans le répertoire personnel de l'utilisateur :
De même, de façon à garder la connexion la plus générique possible dans le but de rendre la suite le plus facilement reproductible possible, on stocke les paramètres de connexion dans le fichier `PGSERVICE` (voir [la doc officielle de PostgreSQL](https://www.postgresql.org/docs/current/libpq-pgservice.html) et [celle de QGIS](https://docs.qgis.org/3.22/fr/docs/user_manual/managing_data_source/opening_data.html#pg-service-file)) :
232
-
233
-
- emplacement par défaut : `~/.pg_service.conf` (Linux) ou `%APPDATA%/postgresql/.pg_service.conf` (Windows)
234
-
- ou personnalisable via une variable d'environnement `PGSERVICEFILE` pointant sur le fichier directement (nommage libre) ou `PGSYSCONFDIR` pointant sur le répertoire où trouver le fichier (qui doit forcément être nommé `pg_service.conf`)
235
-
236
-
```ini
70
+
```ini title="Section dans le fichier ~/.pg_service.conf"
@@ -287,17 +88,10 @@ Un petit tour par GeoFabrik pour télécharger les données de la Belgique : <ht
287
88
288
89
On peut également utiliser un outil en ligne de commande, par exemple `wget` avec l'option `-N` qui permet de télécharger uniquement si le fichier distant (ici le serveur GeoFabrik) est plus récent par rapport à la version locale (sur votre machine) :
- `--create` : créer les données, quitte à les écraser si elles existent déjà dans la base
333
-
- `--database` : nom de la base de données
334
-
- `--port` : port de connexion à la base de données
335
-
- `--cache` : gère la taille du cache (en MB) à allouer pour l'import des noeuds OSM. Je pensais au début que la valeur par défaut (800) suffirait mais j'ai eu l'erreur :*Node cache size is too small to fit all nodes. Please increase cache size*. Dépend de la RAM de votre machine.
336
-
- `--number-processes`: nom de processus à utiliser pour paralléliser les tâches qui peuvent l'être
337
-
338
-
Pour celles et ceux que ça intéresse, voici le détail de l'exécution sur mon ordinateur qui a pris 187 secondes :
339
-
340
-
<!-- markdownlint-disable MD046 -->
341
-
??? example "Le détail de l'exécution sur ma machine"
0 commit comments