---
title: "Migrer une base SQLite vers PostgreSQL"
description: "Migrez une base SQLite vers PostgreSQL : convertissez le fichier .db ou son dump en script avec les mêmes tables, clés et données, et un rapport des changements."
canonical: https://intosql.com/fr/sqlite-en-postgresql
last_updated: 2026-10-15
---

# Migrer une base SQLite vers PostgreSQL

Déposez un fichier de base de données SQLite (.db, .sqlite, .sqlite3) ou le SQL qu'écrit le .dump de sqlite3, et téléchargez un script PostgreSQL avec les mêmes tables, clés, index et données. Chaque colonne reçoit le type auquel ses valeurs correspondent, et chaque valeur que PostgreSQL ne peut pas contenir telle quelle est listée dans le rapport.

[Guide de migration de SQLite vers PostgreSQL](https://intosql.com/docs/migrations/sqlite-to-postgresql)

[Types de données de SQLite vers PostgreSQL](https://intosql.com/docs/types/sqlite-to-postgresql)

## Ce qui change de SQLite à PostgreSQL

Chaque ligne est une règle appliquée par le convertisseur, avec la ligne de rapport qu'il écrit quand la règle change quelque chose dans vos données.

| Dans SQLite | Dans PostgreSQL | Ligne du rapport |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | le type auquel chaque valeur de la colonne correspond |  |
| BOOLEAN, BOOL | boolean |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | varchar(n) si chaque valeur tient dans la longueur déclarée, sinon text |  |
| DECIMAL(p,s), NUMERIC | le type exact si chaque valeur y tient, sinon un double |  |
| BLOB, and columns holding bytes | bytea |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, timestamp |  |
| JSON holding JSON text | jsonb |  |
| Infinity in REAL columns | Infinity, que le double de PostgreSQL conserve |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT AS IDENTITY, qui reprend après l'identifiant le plus élevé ou celui de sqlite_sequence |  |
| COLLATE NOCASE | comparaison exacte | `case_insensitive_collation` |
| generated columns | STORED | `virtual_as_stored` |
| generated columns with functions IntoSQL doesn't write, and the || operator | une colonne simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | aucune valeur par défaut | `default_not_translated` |
| CHECK constraints | traduites |  |
| CHECK constraints with functions IntoSQL doesn't write | non créée | `check_skipped` |
| partial and expression indexes | non créée | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | clés étrangères, NOT VALID puis validées |  |
| foreign keys to tables the dump doesn't create | non créée | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listés dans le rapport | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | types déduits des valeurs | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | retiré | `nul_removed` |
| text that isn't valid UTF-8 | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |

## Charger le script dans PostgreSQL

Le script crée les tables, copie les lignes, puis ajoute les clés, les index et les clés étrangères ; il se charge donc vite et s'arrête à la première erreur.

```shell
psql -v ON_ERROR_STOP=1 -d mydb -f sqlite.postgresql.sql
```

Les clés étrangères sont ajoutées en NOT VALID, puis validées. Si une ligne pointe vers une ligne qui n'existe pas, le script vous indique quelle contrainte, au lieu d'échouer à mi-chemin.

Pour un gros dump, créez d'abord la base de données et exécutez le script avec psql depuis la machine du serveur.

IntoSQL Pro charge le fichier directement dans PostgreSQL depuis l'application de bureau ou la ligne de commande, sans écrire de script.

## Faire le dump SQLite pour un meilleur résultat

Le convertisseur lit ce que contient le dump. Ces options y gardent davantage de vos données :

- Le fichier de base de données lui-même se convertit tel quel, lu page par page dans votre navigateur. Fermez d'abord l'application qui y écrit, pour qu'aucun changement ne reste dans son fichier -wal.
- sqlite3 app.db .dump > app.sql écrit la même base de données en SQL, qui se convertit aussi, en .sql ou .sql.gz.
- DB Browser for SQLite écrit ce SQL avec File, Export, Database to SQL file, tout comme iterdump() de Python.

## Ce qui n'est pas converti

Les vues et les déclencheurs sont écrits dans le langage propre à SQLite. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour PostgreSQL. Les tables virtuelles, comme FTS5 et R*Tree, sont listées aussi, et leurs tables internes sont omises.

## Questions sur SQLite vers PostgreSQL

### Mon dump est-il envoyé ?

Non. Le convertisseur s'exécute dans votre navigateur et lit le dump depuis votre disque par morceaux ; il ne quitte donc jamais votre ordinateur. L'application de bureau et la ligne de commande convertissent aussi sur votre ordinateur.

### Quelle taille peut avoir le dump ?

Le convertisseur ne garde jamais tout le dump en mémoire : il lit le fichier deux fois, par plages, et écrit le script au fur et à mesure. Les dumps de plusieurs gigaoctets se convertissent dans le navigateur, dans l'application de bureau et avec la ligne de commande.

### Puis-je convertir le fichier .db lui-même ?

Oui. Déposez le fichier .db, .sqlite ou .sqlite3 : il est lu dans votre navigateur et jamais envoyé. Le texte avec des caractères NUL et chaque chiffre d'un double arrivent tels qu'ils sont stockés, ce qu'un .dump peut tronquer.

### De quelles versions de SQLite le dump peut-il venir ?

Les fichiers de base de données de SQLite 3.0 et après, en UTF-8 ou UTF-16, et les dumps du .dump du shell sqlite3 ou de iterdump() de Python. Chaque fichier et dump de test vient de sqlite3 3.31 à 3.54, tables STRICT et WITHOUT ROWID comprises, et est comparé à sa source cellule par cellule.

### Comment les types de colonnes sont-ils décidés quand SQLite ne les impose pas ?

Le type déclaré est une indication et les valeurs décident : une colonne devient integer, numeric, double precision, date, timestamp, boolean, bytea ou text quand chaque valeur y correspond. Une colonne aux valeurs mélangées garde leur texte, et le rapport indique lesquelles.

### INTEGER PRIMARY KEY et AUTOINCREMENT sont-ils conservés ?

Oui. Un INTEGER PRIMARY KEY devient une colonne d'identité, chaque ligne garde son identifiant, et le prochain identifiant reprend après le plus élevé, ou après la valeur de sqlite_sequence avec AUTOINCREMENT.

### Et les vues et les déclencheurs ?

Ils sont listés par nom dans le rapport et ne sont pas convertis, car chaque base de données les écrit dans son propre langage.

### Sur quelles versions de PostgreSQL le script se charge-t-il ?

PostgreSQL 13 à 18. Le même script se charge sur chacune, et s'arrête à la première erreur en cas de problème.

## Depuis SQLite

- [SQLite vers MySQL](https://intosql.com/fr/sqlite-en-mysql)
- [SQLite vers MariaDB](https://intosql.com/fr/sqlite-en-mariadb)
- [SQLite vers SQLite](https://intosql.com/fr/sqlite-en-sqlite)
- [SQLite vers SQL Server](https://intosql.com/fr/sqlite-en-sql-server)
- [SQLite vers Oracle](https://intosql.com/fr/sqlite-en-oracle)

## Vers PostgreSQL

- [MySQL vers PostgreSQL](https://intosql.com/fr/mysql-en-postgresql)
- [MariaDB vers PostgreSQL](https://intosql.com/fr/mariadb-en-postgresql)
- [PostgreSQL vers PostgreSQL](https://intosql.com/fr/postgresql-en-postgresql)
- [SQL Server vers PostgreSQL](https://intosql.com/fr/sql-server-en-postgresql)
- [Oracle vers PostgreSQL](https://intosql.com/fr/oracle-en-postgresql)

## Guide et toutes les paires

- [PostgreSQL vers SQLite](https://intosql.com/fr/postgresql-en-sqlite)
- [Guide de migration de SQLite vers PostgreSQL](https://intosql.com/docs/migrations/sqlite-to-postgresql)
- [Types de données de SQLite vers PostgreSQL](https://intosql.com/docs/types/sqlite-to-postgresql)
- [Toutes les paires de bases de données](https://intosql.com/fr/migration-de-base-de-donnees)
