> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conare.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrer depuis Turbopuffer

> Copiez chaque ligne, vecteur et attribut Turbopuffer vers ConareDB avec un importeur reprenable et vérifiant, en lecture seule sur la source.

Le moteur en cours d'exécution embarque sa propre CLI de migration — téléchargez-la depuis le service afin qu'elle corresponde toujours au build déployé :

```bash theme={null}
curl -fsSO https://db.conare.ai/v1/tools/migrate-turbopuffer.py

export TURBOPUFFER_API_KEY='tpuf_...'
export CONAREDB_API_KEY='cdb_...'

python3 migrate-turbopuffer.py \
  --source-namespace my-production-data \
  --destination-namespace acme-production
```

## Ce qu'elle garantit

* **En lecture seule sur la source.** Elle ne supprime ni ne modifie jamais les données Turbopuffer, et votre clé Turbopuffer n'est jamais envoyée à Conare.
* **Reprenable.** Paginetion par id ascendant, upserts atomiques de batchs de destination, et écriture d'un point de reprise sans secret après chaque page acquittée — interrompez-la et relancez-la, elle reprend là où elle s'est arrêtée.
* **Vérifiante.** Compacte la destination et vérifie le nombre de lignes à la fin de la copie.
* **Échec fermé.** L'importateur prend en charge une seule colonne de vecteur dense par namespace ; les namespaces multi-vecteur, à vecteur clairsemé et à interaction tardive échouent avec une erreur explicite plutôt que de laisser tomber des données silencieusement.

## Options

| Flag                                          | Rôle                                                     |
| --------------------------------------------- | -------------------------------------------------------- |
| `--all-namespaces --destination-prefix acme-` | Migrer un compte complet                                 |
| `--dry-run`                                   | Valider la première page sans écrire                     |
| `--vector-attribute name`                     | Lorsque la colonne vectorielle ne s'appelle pas `vector` |

## Après la migration

Les requêtes se portent naturellement : le [shim de requête `/v2`](/db/search#turbopuffer-compatible-shim) accepte la forme de lecture Turbopuffer (`rank_by`, `filters`, `top_k`, `include_attributes`) telle quelle, et le DSL de filtres natif [`/v1/search`](/db/search) utilise les mêmes opérateurs `[property, op, value]` que vous écrivez déjà.
