Administration BDD

🗄️ Fiche Administrateur PostgreSQL / PostGIS (SIG) – Version complète structurée

Cette fiche présente les étapes logiques d’administration PostgreSQL/PostGIS : installation → configuration → gestion → stockage → import SIG → sauvegarde → automatisation → monitoring.


1. Vérification du serveur PostgreSQL

Vérifier l’état du service :

sudo systemctl status postgresql.service

Démarrer le service :

sudo systemctl start postgresql.service

Arrêter :

sudo systemctl stop postgresql.service

Redémarrer :

sudo systemctl restart postgresql.service

Activer au démarrage :

sudo systemctl enable postgresql.service

N.B. Si le fichier de configuration postgresql.conf a été modifié, faire sudo systemctl stop postgresql.service avant de faire sudo systemctl start postgresql.service**


2. Connexion à PostgreSQL

Connexion locale :

psql -U postgres -d postgres

Connexion distante :

psql -h host -p port -U user -d database

Exemple :

psql -h 192.168.10.1 -p 15432 -U editeur -d mardochee

Quitter psql :

\q

3. Gestion des bases de données

Lister les bases :

\l

Créer une base :

CREATE DATABASE ma_base;

Se connecter à ma base de donnée "mardochee" :

\c mardochee

ou

\connect mardochee

une fois connectée , lister toutes les tables dans le schema "qualite"

\dt qualite.*

lister les utilisateurs de la base de données :

\du

Supprimer une base :

DROP DATABASE ma_base;

4. Gestion des rôles et utilisateurs

Créer un rôle

CREATE ROLE nom_utilisateur LOGIN;

Un rôle permet de gérer les utilisateurs et leurs permissions dans la base de données Ses pouvoirs : - contrôler qui peut se connecter - définir ce que la personne peut faire - appliquer une gestion de sécurité et des privilèges

Exemple création d'un rôle "idgeo" :

-- Role: idgeo (ici idgeo c'est un groupe )
-- DROP ROLE IF EXISTS idgeo;
CREATE ROLE idgeo WITH
    LOGIN -- se connecter à PostgreSQL, Sans LOGIN, ne peut pas ouvrir de session
    NOSUPERUSER --pas es privilèges d'admin global, ne peut pas modifier toute la base ni accéder à toutes les données
    INHERIT --hérite automatiquement des privilèges des rôles auxquels il appartient
    CREATEDB --peut créer de nouvelles bases de données
    NOCREATEROLE -- Interdit au rôle de créer ou modifier d'autres rôles, donc ne peut donc pas gérer les utilisateurs
    NOREPLICATION --ne peut pas être utilisé pour la réplication
    NOBYPASSRLS --ne peut pas contourner les politiques de sécurité au niveau des lignes (Row Level Security)
;

Créer un utilisateur :

CREATE USER user1 WITH PASSWORD 'password';

Donner les droits :

GRANT ALL PRIVILEGES ON DATABASE ma_base TO user1;

Revoquer les droits :

REVOKE  PRIVILEGES ON DATABASE ma_base TO user2;

Modifier mot de passe :

ALTER USER user1 WITH PASSWORD 'new_password';

Supprimer utilisateur :

DROP USER user1;

Lister les rôles :

\du

5. Installation de PostGIS

Activer PostGIS :

CREATE EXTENSION postgis;

Vérifier la version :

SELECT PostGIS_version();

Lister les extensions :

\dx

6. Gestion des schémas

Créer un schéma :

CREATE SCHEMA admin;

Lister les schémas :

\dn

Supprimer :

DROP SCHEMA admin CASCADE;

7. Création de tables géographiques

CREATE TABLE communes (
    id SERIAL PRIMARY KEY,
    nom VARCHAR(100),
    geom geometry(MULTIPOLYGON,2154)
);

8. Index spatial

CREATE INDEX communes_geom_idx
ON communes
USING GIST (geom);

9. Fonctions PostGIS essentielles

ST_Intersects()
ST_Contains()
ST_Distance()
ST_Buffer()
ST_Union()
ST_Area()
ST_Length()
ST_Transform()

Exemple :

SELECT *
FROM communes
WHERE ST_Intersects(geom, autre_geom);

10. Transformation de projection

SELECT ST_Transform(geom,2154)
FROM table;

11. Tablespaces PostgreSQL

Créer le dossier du tablespace :

sudo mkdir -p /srv/tablespace/

Donner les droits :

sudo chown postgres:postgres /srv/tablespace/

Créer le tablespace :

CREATE TABLESPACE mine
LOCATION '/srv/tablespace';

Lister les tablespaces :

\db

12. Vérification du stockage physique

Lister le contenu :

sudo ls -la /srv/tablespace

Explorer la structure interne :

sudo ls -la /srv/tablespace/PG_*

Voir les liens PostgreSQL :

ls -la /var/lib/postgresql/16/main/pg_tblspc

13. Import de données SIG

Importer un shapefile :

ogr2ogr -f "PostgreSQL" PG:"dbname=ma_base user=postgres" -nln admin.communes communes.shp

Importer avec reprojection :

ogr2ogr -f "PostgreSQL" PG:"dbname=ma_base user=postgres" -s_srs EPSG:4326 -t_srs EPSG:2154 communes.shp

Importer un département spécifique :

ogr2ogr -f "PostgreSQL" PG:"dbname=hg user=postgres" departement_31.shp -nln dept_31 -nlt PROMOTE_TO_MULTI -lco GEOMETRY_NAME=geom

14. Export de données

ogr2ogr communes.shp PG:"dbname=ma_base user=postgres" -nln admin.communes

15. Sauvegarde PostgreSQL

Sauvegarde simple :

pg_dump ma_base > sauvegarde.sql

Sauvegarde complète :

pg_dumpall > all_db.sql

Sauvegarde avec options :

pg_dump -U postgres -p 5432 -d hg -f /mnt/d/admin_bd/hg_backup.sql

16. Restauration d'une base

Créer une base :

psql -U postgres -p 5432 -c "CREATE DATABASE hg_restore;"

Restaurer :

psql -U postgres -p 5432 -d hg_restore < hg_backup.sql

17. Script bash de sauvegarde automatisée

Créer le script :

nano script_sauv_bdd.sh

Script :

#!/bin/bash

DATE=$(date +%Y-%m-%d_%H-%M)

pg_dump -U postgres -p 5432 -d hg -f /mnt/d/admin_bd/hg_backup_$DATE.sql

psql -U postgres -c "DROP DATABASE IF EXISTS hg_restore;"
psql -U postgres -c "CREATE DATABASE hg_restore;"

psql -U postgres -p 5432 -d hg_restore < /mnt/d/admin_bd/hg_backup_$DATE.sql

Rendre exécutable :

chmod +x script_sauv_bdd.sh

Tester :

./script_sauv_bdd.sh

18. Automatisation avec CRON

Modifier la crontab :

crontab -e

Ajouter :

20 3 * * * /home/ofbpnmba/script_sauv_bdd.sh >> /home/ofbpnmba/backup.log 2>&1

Vérifier :

crontab -l

19. Monitoring PostgreSQL

Tester si PostgreSQL répond :

pg_isready

Lister les clusters :

pg_lsclusters

Voir les processus :

ps -aux | grep postgres

Surveiller les ressources :

htop

Connexions actives :

SELECT * FROM pg_stat_activity;

20. Logs PostgreSQL

Consulter les logs :

sudo less /var/log/postgresql/postgresql-16-main.log

Suivre en temps réel :

tail -f /var/log/postgresql/postgresql-16-main.log

21. Export de l'historique Linux

Afficher l’historique avec date :

HISTTIMEFORMAT="%F %T " history

Exporter dans un fichier CSV :

HISTTIMEFORMAT="%F;%T " history | grep "$(date +%F)" > history_2026.csv

22. Architecture SIG typique

Linux
 ├─ PostgreSQL
 │   └─ PostGIS
 ├─ GDAL / OGR
 ├─ QGIS
 └─ WebSIG
     ├─ GeoServer
     ├─ Leaflet
     └─ OpenLayers

23. Bonnes pratiques DBA SIG

✔ utiliser des tablespaces pour les gros volumes
✔ créer des index spatiaux
✔ vérifier les projections EPSG
✔ sauvegarder régulièrement la base
✔ automatiser les sauvegardes avec cron
✔ surveiller les logs PostgreSQL

🔗 Connexions distantes avec Foreign Data Wrappers (FDW)

1. Principe

Les Foreign Data Wrappers (FDW) permettent à PostgreSQL d'accéder à des données externes comme si elles étaient des tables locales.

Cela permet de :

  • interroger des bases PostgreSQL distantes
  • accéder à des services web (WFS)
  • lire des fichiers externes
  • accéder à d'autres bases de données (Oracle, MySQL, etc.)

Les données externes apparaissent sous forme de foreign tables.


2. Avantages des FDW

✔ accès transparent aux données distantes
✔ possibilité de requêtes SQL directes
✔ intégration avec PostGIS
✔ évite la duplication des données

Exemple :

SELECT *
FROM table_distante
WHERE id = 10;

3. Types de sources supportées

Le FDW permet d'accéder à différents types de sources :

Source Mode
PostgreSQL lecture / écriture
Oracle lecture / écriture
MySQL lecture / écriture
CSV lecture
ODBC / JDBC dépend du driver
NoSQL (CouchDB, Redis) dépend du driver
WFS / fichiers géographiques lecture

4. Activation des extensions FDW

Activer le FDW PostgreSQL :

CREATE EXTENSION postgres_fdw;

Activer le FDW GDAL :

CREATE EXTENSION ogr_fdw;

Activer le FDW FILE GDAL :

CREATE EXTENSION file_fdw;

5. Connexion à une base PostgreSQL distante

Création du serveur distant

CREATE SERVER foreign_bd
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (
    host 'localhost',
    port '5434',
    dbname 'bd_test_postgis'
);
Paramètre Description
host adresse du serveur distant
port port PostgreSQL
dbname base distante

6. Association des utilisateurs

Associer un utilisateur local à un utilisateur distant.

CREATE USER MAPPING FOR postgres
SERVER foreign_bd
OPTIONS (
    user 'postgres',
    password 'postgres'
);
élément description
postgres utilisateur local
user utilisateur distant
password mot de passe distant

7. Création d'une table distante

Une foreign table représente une table distante.

CREATE FOREIGN TABLE foreign_parkings (
    osm_id integer NOT NULL,
    date_heure timestamp without time zone,
    nom character varying,
    type_obj character varying,
    xcoord double precision,
    ycoord double precision,
    geom geometry(Point,2154)
)
SERVER foreign_bd
OPTIONS (
    schema_name 'public',
    table_name 'parkings'
);

Interroger la table distante :

SELECT *
FROM foreign_parkings
LIMIT 10;

8. Accès à un service WFS avec ogr_fdw

Créer un serveur WFS :

CREATE SERVER fdw_ogr_inpn_metropole
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (
    datasource 'WFS:http://ws.carmencarto.fr/WFS/119/fxx_inpn?',
    format 'WFS'
);

9. Création du schéma d'import

CREATE SCHEMA IF NOT EXISTS inpn_metropole;

10. Import des tables du service WFS

IMPORT FOREIGN SCHEMA ogr_all
FROM SERVER fdw_ogr_inpn_metropole
INTO inpn_metropole
OPTIONS (
    launder_table_names 'true',
    launder_column_names 'true'
);
option rôle
launder_table_names nettoie les noms de tables
launder_column_names nettoie les noms de colonnes

11. Vérification des tables importées

SELECT foreign_table_schema, foreign_table_name
FROM information_schema.foreign_tables
WHERE foreign_table_schema = 'inpn_metropole'
ORDER BY foreign_table_schema, foreign_table_name;

12. Exemple d'interrogation

SELECT *
FROM inpn_metropole.zico
LIMIT 3;

13. Architecture FDW

PostgreSQL local
        │
        │
        ├── postgres_fdw
        │       │
        │       └── PostgreSQL distant
        │
        └── ogr_fdw
                │
                └── WFS / fichiers géographiques

14. Bonnes pratiques

✔ utiliser FDW pour éviter la duplication des données
✔ limiter les requêtes lourdes sur les serveurs distants
✔ créer des vues locales pour simplifier l'accès
✔ surveiller les performances réseau


15. Exemple d'utilisation SIG

Serveur SIG
│
├── Base principale
│
├── FDW vers base cadastre
│
├── FDW vers base biodiversité
│
└── FDW vers service WFS INPN

Les données peuvent être utilisées directement dans QGIS.