#1 Tue 07 October 2025 16:23
- drawer76
- Juste Inscrit !
- Date d'inscription: 7 Oct 2025
- Messages: 2
Import d'un WFS dans BDD postgres
Bonjour,
Je travaille sur une base PostgreSQL avec des foreign tables pointant vers les services WFS du SANDRE.
Pour ce faire, j’ai créé une fonction refresh_sandre_all qui :
- Supprime toutes les vues matérialisées existantes dans le schéma.
- Supprime et réimporte chaque foreign table depuis le WFS SANDRE (table par table).
- Crée les vues matérialisées avec la colonne reprojetée geom et l’index spatial correspondant.
Cette approche fonctionne bien pour moi, car je peux simplement relancer la fonction pour actualiser toutes les données. Cependant, elle est assez “lourde” côté PL/pgSQL, avec des boucles et des EXECUTE format().
Je me pose les questions suivantes :
Existe-t-il une méthode plus simple ou plus standard pour automatiser la mise à jour des tables WFS et la création des vues matérialisées, sans avoir besoin de gérer manuellement chaque table ?
Merci d’avance pour vos retours et suggestions !
Hors ligne
#2 Tue 07 October 2025 16:50
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1215
Re: Import d'un WFS dans BDD postgres
Bonjour,
Je ne suis pas au courant d'une méthode standard. Pour améliorer votre methode, vous pourriez décomposer votre fonction en plusieurs sous-fonction, par exemple, une fonction qui prends en argument l'adresse d'un flux wms et qui crée la table fdw et la vue associée, et une seconde qui utilise la première pour ajouter tous les fluw WMS, cela rendrait votre code plus maintenable et extensible.
En revanche, je dois sans doute louper quelque chose mais pourquoi recréer les vues matérialisées quand vous pouvez les rafraichir ?
Code:
REFRESH MATERIALIZED VIEW ma_vue
Le corps de votre fonction serait alors juste une suite de commande REFRESH.
Hors ligne
#3 Hier 12:03
- drawer76
- Juste Inscrit !
- Date d'inscription: 7 Oct 2025
- Messages: 2
Re: Import d'un WFS dans BDD postgres
Merci pour ta réponse.
Cette fonction est super pratique pour garder les tables distantes et leurs vues à jour.
Il faut toujours réimporter toutes les tables distantes, parce que PostgreSQL ne peut pas mettre à jour automatiquement le contenu des foreign tables locales. Et on ne peut pas simplement « refresh » une vue matérialisée si elle dépend de ces tables, puisque la vue doit refléter exactement les données sources. Du coup, il est nécessaire de supprimer les vues matérialisées, réimporter les tables pour récupérer les dernières données, puis recréer les vues avec les bonnes projections et index.
L’avantage, c’est que tout le processus est automatisé, ce qui évite les erreurs manuelles et garantit que les données locales sont bien à jour par rapport aux tables distantes. En plus, grâce aux messages console (intégré dans la fonction), on peut suivre facilement chaque étape, et comme tout est centralisé dans une seule fonction, c’est simple à lancer régulièrement et à maintenir, même si le schéma ou les tables changent.
Dernière modification par drawer76 (Hier 14:20)
Hors ligne