# 10.2 - Restauration PostgreSQL en ligne de commande

La restauration en ligne de commande est réservée aux cas avancés. Utiliser un nouvel emplacement PostgreSQL vide au lieu de supprimer immédiatement l'ancien.

## Préparer un nouvel emplacement

Arrêter l'instance :

```bash
cd /srv/immich/app
docker compose down
```

Dans `.env`, pointer temporairement vers un nouveau dossier vide et explicite :

```dotenv
DB_DATA_LOCATION=/srv/immich/postgres-restore-2026-08-07
```

Créer les conteneurs sans lancer le serveur :

```bash
docker compose pull
docker compose create
docker start immich_postgres
```

Adapter le nom du conteneur PostgreSQL.

## Vérifier PostgreSQL

```bash
docker exec immich_postgres pg_isready -U postgres -d immich
```

## Restaurer le dump

```bash
gunzip --stdout /srv/backups/immich/dump.sql.gz \
  | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
  | docker exec -i immich_postgres \
      psql --dbname=immich --username=postgres \
      --single-transaction --set ON_ERROR_STOP=on
```

Cette commande suit le principe documenté par Immich. Adapter les valeurs sans ajouter le mot de passe dans la ligne de commande.

## Démarrer Immich

```bash
docker compose up -d
docker compose logs -f immich-server
```

## Si le serveur démarre trop tôt

Dans certains déploiements, utiliser temporairement :

```dotenv
DB_SKIP_MIGRATIONS=true
```

Restaurer la base, retirer la variable puis recréer les conteneurs. Ne pas laisser cette variable active.

## Revenir sans destruction

Si la restauration échoue :

1. arrêter les conteneurs ;
2. conserver le nouvel emplacement pour analyse ;
3. remettre dans `.env` l'ancien `DB_DATA_LOCATION` ;
4. redémarrer l'ancienne instance ;
5. ne pas mélanger les deux bases.

## TrueNAS

L'application TrueNAS rend difficile le démarrage isolé de PostgreSQL. Préférer l'interface de restauration. Pour une intervention manuelle, effectuer d'abord snapshots et dump, puis suivre les instructions correspondant exactement à la version du catalogue.

Référence : `https://docs.immich.app/administration/backup-and-restore/`