<!--

Les sources pour ce sujet sont :

* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=a0ff37173d7d412d53bc299fc611068be3bc7060

Discussion: 

http://postgr.es/m/CA+TgmoYOYZfMCyOXFyC-P+-mdrZqm5pP2N7S-r0z3_402h9rsA@mail.gmail.com

-->

<div class="slide-content">

  * Nouvelle fonctionnalité de sauvegarde incrémentale dans PostgreSQL
    + Commande `UPLOAD_MANIFEST` pour télécharger le manifeste 
    + Commande `BASE_BACKUP` pour effectuer la sauvegarde

</div>

<div class="notes">

Pour faire une sauvegarde incrémentale, il est désormais possible d'utiliser 
la nouvelle commande de réplication `UPLOAD_MANIFEST` pour télécharger le manifeste 
de la sauvegarde précédente. Cette dernière peut être une sauvegarde complète
ou une autre sauvegarde incrémentale. Ensuite, la commande `BASE_BACKUP` avec
l'option `INCREMENTAL` permet d'effectuer la sauvegarde. L'outil _pg_basebackup_
dispose désormais d'une option `--incremental=PATH_TO_MANIFEST` pour déclencher ce
comportement.

**Sauvegarde complète**

La première étape consiste à effectuer une sauvegarde complète de la base de données. 
Cela sert de point de référence pour les sauvegardes incrémentales suivantes :

```bash
postgres@17:~$ pg_basebackup -D backup_full_17b2_1
```

**Insertion de données dans la base de données**

Nous ajoutons ensuite des données dans une table de la base de données pour générer
des modifications qui seront prises en compte dans la sauvegarde incrémentale.

```sql
postgres=# INSERT INTO t1 SELECT * FROM generate_series(0, 10000);

INSERT 0 10001
```

**Sauvegarde incrémentale**

Après l'ajout de données, nous pouvons effectuer une sauvegarde incrémentale en
utilisant l'option `--incremental` qui se base sur le manifeste de la sauvegarde 
précédente.

```bash
postgres@17:~$ pg_basebackup -D backup_inc_17b2_1 --incremental=backup_full_17b2_1/backup_manifest
```

**Combinaison des sauvegardes**

Une fois la sauvegarde incrémentale effectuée, nous pouvons combiner la sauvegarde
complète et incrémentale en une seule archive utilisable à l'aide de l'outil `pg_combinebackup` :

```bash
postgres@17:~$ pg_combinebackup backup_full_17b2_1 backup_inc_17b2_1 --output=backup_combined_17b2_1
```

**Vérification de la sauvegarde combinée**

Le répertoire de la sauvegarde combinée contiendra une sauvegarde complète, 
prête à être utilisée pour une restauration :

```bash
postgres@17:~$ ls backup_combined_17b2_1/

backup_label     pg_dynshmem    pg_notify     pg_stat_tmp  pg_wal
backup_manifest  pg_hba.conf    pg_replslot   pg_subtrans  pg_xact
base             pg_ident.conf  pg_serial     pg_tblspc    postgresql.auto.conf
global           pg_logical     pg_snapshots  pg_twophase  postgresql.conf
pg_commit_ts     pg_multixact   pg_stat       PG_VERSION
```

**Conclusion**

L'introduction des sauvegardes incrémentales dans PostgreSQL simplifie la gestion 
des bases de données volumineuses en réduisant la taille des sauvegardes et le temps 
nécessaire pour les réaliser. Grâce à l'utilisation des sommaires WALs, seules les 
parties modifiées des bases de données sont sauvegardées, ce qui optimise les 
opérations de sauvegarde.
Il faudra cependant faire attention, son utilisation étant destinée à des outils
externes, il n'y a pas de vérification de continuité ni d'intégrité des sauvegardes,
ce qui peut s'avérer fastidieux à faire manuellement.

</div>

