# Exemple sur fulldvf France de 2020 à 2025

1/ on a regroupé les fichiers fullDVF sur le home/debian/data  
  
  
2/ on a lancé le script

\#!/bin/bash  
TARGET\_TABLE="dvf\_raw.var\_history\_83"  
DATA\_DIR="/home/debian/data"

echo "----------------------------------------------------"  
echo "ALTERIS - Moissonnage VAR (83) - Colonne 13"  
echo "----------------------------------------------------"

\# 1. On vide la table pour repartir sur une base propre  
docker exec -i alteris\_postgis psql -U alteris\_admin -d alteris\_geo -c "TRUNCATE $TARGET\_TABLE;"

\# 2. Boucle sur les 6 fichiers  
for YEAR in {2020..2025}; do  
 FILE="$DATA\_DIR/fullDVF\_${YEAR}.csv"  
   
 if \[ -f "$FILE" \]; then  
 echo "--&gt; Extraction Var 83 dans l'année $YEAR..."  
   
 # On prépare le fichier temporaire avec l'entête  
 head -n 1 "$FILE" &gt; "$DATA\_DIR/var\_tmp.csv"  
   
 # FILTRE : On cherche exactement le code 83 après 12 virgules  
 grep -E "^(\[^,\]\*,){12}83," "$FILE" &gt;&gt; "$DATA\_DIR/var\_tmp.csv"  
   
 # Injection  
 cat "$DATA\_DIR/var\_tmp.csv" | docker exec -i alteris\_postgis psql -U alteris\_admin -d alteris\_geo -c "COPY $TARGET\_TABLE FROM STDIN WITH (FORMAT CSV, HEADER, DELIMITER ',');"  
   
 # Nettoyage  
 rm "$DATA\_DIR/var\_tmp.csv"  
 fi  
done

echo "----------------------------------------------------"  
echo "RÉSULTAT DE L'OBJECTIVATION :"  
docker exec -i alteris\_postgis psql -U alteris\_admin -d alteris\_geo -c "SELECT count(\*) as total\_var\_83 FROM $TARGET\_TABLE;"

On monte la table pure

C'est la voix de la sagesse **Alteris** : d'abord figer la donnée brute certifiée (le socle), puis construire la production par-dessus. On ne mélange pas l'archive et l'analyse.

On va donc créer la table **`DVFFull83_raw`**. Ce sera ta "Banque Centrale" du Var : une table physique, indexée, contenant l'intégralité des 451 336 lignes sans aucune transformation, mais avec une colonne géométrique propre pour QGIS.

### 1. Bloc d'évolutions proposées

<div class="container" id="bkmrk-mat%C3%A9rialisation-%3A-on"><div class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Matérialisation :** On passe d'une vue à une **TABLE** physique (plus rapide pour QGIS).
- **Typage SQL :** On convertit les colonnes critiques (Date, Prix, Surface) pour permettre les tris immédiats, mais on garde tout le reste.
- **Indexation Double :** Un index spatial (GIST) pour la carte et un index attributaire sur le `code_commune`.

---

</div></div>### 2. Création de la Table de Référence : `DVFFull83_raw`

Lance ce bloc pour graver tes données dans le marbre :

<div class="container" id="bkmrk-"><div class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr"></div></div><div class="code-block ng-tns-c3877021074-1980 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-sql"><div class="code-block-decoration header-formatted gds-title-s ng-tns-c3877021074-1980 ng-star-inserted"><span class="ng-tns-c3877021074-1980">SQL</span><div class="buttons ng-tns-c3877021074-1980 ng-star-inserted"></div></div><div class="formatted-code-block-internal-container ng-tns-c3877021074-1980"><div class="animated-opacity ng-tns-c3877021074-1980">  
</div></div></div>```
docker exec -i alteris_postgis psql -U alteris_admin -d alteris_geo -c "
DROP TABLE IF EXISTS dvf_raw.\"DVFFull83_raw\";

CREATE TABLE dvf_raw.\"DVFFull83_raw\" AS
SELECT 
    -- Géométrie Lambert 93 générée à la volée
    ST_Transform(ST_SetSRID(ST_MakePoint(NULLIF(c39, '')::double precision, NULLIF(c40, '')::double precision), 4326), 2154) as geom,
    c1 as id_mutation,
    NULLIF(c2, '')::date as date_mutation,
    c4 as nature_mutation,
    NULLIF(c5, '')::numeric as valeur_fonciere,
    c8 as adresse_numero,
    c9 as adresse_nom_voie,
    c10 as code_postal,
    c11 as code_commune,
    c12 as nom_commune,
    c13 as code_departement,
    c16 as id_parcelle,
    c29 as lot1_surface_carrez,
    c31 as type_local,
    NULLIF(c32, '')::numeric as surface_reelle_bati,
    NULLIF(c33, '')::integer as nombre_pieces_principales,
    NULLIF(c38, '')::numeric as surface_terrain,
    c39 as longitude_wgs84,
    c40 as latitude_wgs84
FROM dvf_raw.var_history_83
WHERE c39 ~ '^-?[0-9]';

-- Indexation de performance
CREATE INDEX sidx_dvffull83_geom ON dvf_raw.\"DVFFull83_raw\" USING GIST (geom);
CREATE INDEX idx_dvffull83_commune ON dvf_raw.\"DVFFull83_raw\" (code_commune);
CREATE INDEX idx_dvffull83_date ON dvf_raw.\"DVFFull83_raw\" (date_mutation);
"

```

<div class="code-block ng-tns-c3877021074-1980 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1"><div class="formatted-code-block-internal-container ng-tns-c3877021074-1980"><div class="animated-opacity ng-tns-c3877021074-1980"></div></div></div><div class="container" id="bkmrk--2"><div class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">---

</div></div>### 3. Raisonnement par étape : Pourquoi c'est ta référence ?

<div class="container" id="bkmrk-immutabilit%C3%A9-%3A-cette"><div class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">1. **Immutabilité :** Cette table contient les 451 336 lignes. Si une vente a 3 lots, tu as les 3 lignes. C'est ta "boîte noire".
2. **Vitesse QGIS :** Contrairement à la table `var_history_83` qui n'a que du texte (TEXT), ici les prix sont des `NUMERIC` et les dates des `DATE`. Les filtres dans QGIS seront instantanés.
3. **Sécurité :** Pour ton rendu de jeudi, si on te pose une question sur un lot spécifique, tu as l'info brute sous la main.

---

</div></div>### 4. Audit Final

Une fois la table créée, vérifie que le compte est bon : `SELECT count(*) FROM dvf_raw."DVFFull83_raw";`

**C'est fait ? Si oui, tu as officiellement ta base de référence pour le Var. On s'arrête là pour la structure ou tu veux qu'on prépare l'export pour ton NAS ?**

**L'export en GPKG n'a pas fonctionné - "C'est une erreur classique de "boîte à outils" : l'image Docker `postgis/postgis` contient la base de données, mais elle n'embarque pas toujours les utilitaires de conversion comme `ogr2ogr` (qui appartiennent à la bibliothèque GDAL)."**

<div class="container" id="bkmrk--3"><div class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk--4"></div></div>```
# Export de ta table de référence vers un fichier GeoPackage
docker exec -i alteris_postgis ogr2ogr -f "GPKG" \
/home/debian/data/DVFFull83_raw_2020_2025.gpkg \
PG:"dbname=alteris_geo user=alteris_admin password=alteris_pwd host=localhost" \
"dvf_raw.DVFFull83_raw"
```

Donc export du `DVFFull83_raw`

en csv avec point geolocalisation et ID Cadastre

```
docker exec -i alteris_postgis psql -U alteris_admin -d alteris_geo -c "
COPY (SELECT * FROM dvf_raw.\"DVFFull83_raw\") TO STDOUT WITH (FORMAT CSV, HEADER, DELIMITER ',');
" > /home/debian/data/DVFFull83_raw_2020_2025.csv
```