PostgreSQL
Statut
Document de cadrage data — version initiale — v1.0 — relu le 2026-05-11.
Rôle
PostgreSQL est la base relationnelle principale de DMV.
Il doit porter les données structurées de l'écosystème : communes, acteurs, utilisateurs, publications, contributeurs, groupes, abonnements, boosts, statistiques, PlayLoop, AssoSuite, Mairie, chat et documents.
État actuel visible
Les migrations Laravel créent notamment :
- profils et rôles ;
- communes et informations communales ;
- acteurs, tags, documents, revendications ;
- publications et signalements ;
- contributeurs, favoris et groupes ;
- plans, abonnements, boosts et usages ;
- feature flags et paramètres ;
- PlayLoop ;
- AssoSuite ;
- chat ;
- alertes et services mairie ;
- cache, jobs et personal access tokens.
Des migrations Supabase historiques existent aussi et doivent être prises en compte dans la gouvernance data.
Principes PostgreSQL
- Modéliser explicitement les relations fortes.
- Préférer les contraintes base quand elles protègent une règle durable.
- Indexer les colonnes utilisées pour recherche, filtres et jointures.
- Garder les données sensibles identifiables et contrôlées.
- Éviter les duplications non justifiées.
- Prévoir l'évolution sans casser les applications connectées.
Couche de compatibilité booléens
Laravel convertit nativement les booléens PHP en entiers (0/1) dans prepareBindings(). PostgreSQL strict refuse les entiers pour les colonnes boolean.
Une classe App\Database\PostgresConnection surcharge prepareBindings() pour convertir true/false PHP en chaînes 'true'/'false' avant la liaison PDO — format que PostgreSQL accepte nativement.
Elle est enregistrée dans AppServiceProvider::register() :
Connection::resolverFor('pgsql', function ($connection, $database, $prefix, $config) {
return new PostgresConnection($connection, $database, $prefix, $config);
});
Cette surcharge est transparente pour le code applicatif.
Protection anti-wipe Supabase
AppServiceProvider::boot() bloque migrate:fresh et migrate:reset si le host contient supabase.co. Ces commandes dropperaient toutes les tables de la production.
Accès aux données
La cible est :
- mutations métier via API Laravel ;
- lectures publiques contrôlées ;
- accès administrateurs via services backend ;
- RPC seulement pour des requêtes contrôlées et justifiées ;
- aucun accès direct IA.
Performance
Les domaines à surveiller :
- listes d'acteurs par commune ;
- mur de la ville ;
- publications par acteur ou commune ;
- favoris ;
- statistiques ;
- recherches ;
- données PlayLoop ;
- modération.
Points à clarifier
- Configuration PostgreSQL réelle par environnement.
- Politique d'indexation.
- Usage futur de vues matérialisées.
- Gouvernance des accès Supabase historiques.
- Stratégie de migration vers une source canonique.