Aller au contenu
Accueil IntoSQL

Convertir PostgreSQL en SQLite

Déposez un dump texte de pg_dump ou pg_dumpall, en .sql ou .sql.gz, et téléchargez un script SQLite avec les mêmes tables, clés, index et données. Chaque valeur que SQLite ne peut pas contenir telle quelle, et chaque objet qu'il ne reprend pas, est listé dans le rapport.

Votre fichier
sqlshop_2024_postgres.sqlFichier d'exemple, 6,2 ko
Votre base de données

18 lignes converties, 3 corrections, aucune rejetée

Afficher

Tables de shop_2024_postgres.sqlDump PostgreSQL 18.6 · écrit par pg_dump · utf8mb4

  • customers8 lignes2
    8 colonnes
    idINTEGER not null
    nameTEXT not null
    emailTEXT not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    tagsTEXT not null
    signed_upDATE
    created_atTIMESTAMP not null
  • orders10 lignes1
    10 colonnes
    idINTEGER not null
    customer_idINTEGER not null
    statusTEXT not null
    totalDECIMAL(10,2) not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteTEXT
    detailsTEXT
    deliveryTEXT

Non converti

  • Vue paid_orders

Chaque base de données les écrit dans son propre langage. Réécrivez-les pour SQLite.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;

CREATE TABLE customers ( -- People who bought at least once
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    country VARCHAR(2) DEFAULT 'US' NOT NULL,
    is_active INTEGER DEFAULT 1 NOT NULL,
    tags TEXT NOT NULL,
    signed_up DATE,
    created_at TIMESTAMP DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')) NOT NULL,
    CONSTRAINT customers_is_active_check CHECK (is_active IN (0, 1))
);

CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    status TEXT DEFAULT 'pending' NOT NULL,
    total DECIMAL(10,2) NOT NULL,
    items INTEGER DEFAULT 1 NOT NULL,
    ordered_at DATETIME NOT NULL,
    shipped_at DATETIME,
    note TEXT,
    details TEXT,
    delivery TEXT,
    CONSTRAINT orders_status_check CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled')),
    CONSTRAINT orders_orders_total_check CHECK (total >= (0)),
    CONSTRAINT orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES customers (id)
);

INSERT INTO customers (id, name, email, country, is_active, tags, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'["vip"]','2023-01-15','2023-01-15 10:24:00'),
(2,'Zoë Müller','zoe@example.de','DE',1,'[]','2023-02-03','2023-02-03 08:11:42'),
(3,'José Peña','jose@example.es','ES',0,'["wholesale","late payer"]','2023-03-21','2023-03-21 19:05:17'),
(4,'李雷','lilei@example.cn','CN',1,'[]','2023-05-09','2023-05-09 02:40:00'),
(5,'Noah O''Brien','noah@example.ie','IE',1,'[]',NULL,'2023-06-30 14:00:00'),
(6,'Amélie Laurent','amelie@example.fr','FR',1,'["vip"]','2024-01-02','2024-01-02 09:30:00'),
(7,'Ravi Patel','ravi@example.in','IN',0,'[]','2024-02-29','2024-02-29 23:59:59'),
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'[]','2024-04-12','2024-04-12 12:12:12');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, delivery) VALUES
(1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'{"gift": false}','1 day 06:30:00'),
(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}',NULL),
(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind',NULL,NULL),
(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','{"fragile": true}','2 days 05:50:00'),
(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice',NULL,NULL),
(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"','{"fragile": true}','20:00:00'),
(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,NULL,NULL),
(8,2,'shipped',19.99,1,'2024-03-12 08:00:00',NULL,'Shipped date set to infinity by an old import',NULL,NULL),
(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','2024-03-15 10:00:00','Two parcels','{"parcels": [1, 2]}','18:30:00'),
(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf',NULL,NULL);

-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_customers_email_key ON customers (email);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 1000) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 1000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 5000) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 5000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
COMMIT;

-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;

Corrections

  1. "created_at" de customers contient des instants avec fuseau horaire ; SQLite n'a aucun type qui le garde, ils sont donc stockés en UTC en TIMESTAMP.
  2. "tags" de customers est text[], que SQLite n'a pas ; elle est donc en TEXT avec les mêmes valeurs.
  3. "delivery" de orders est interval, que SQLite n'a pas ; elle est donc en TEXT avec les mêmes valeurs.

À vérifier

  • 1 objet non converti (vues, déclencheurs, routines ou événements) ; le rapport les liste un par un. Recréez-les à la main dans SQLite.
  • La valeur par défaut de "tags" dans customers ne peut pas être écrite pour SQLite (a value its type can't hold) ; la colonne n'a donc pas de valeur par défaut. Ajoutez la valeur par défaut à la main si les nouvelles lignes en ont besoin.
  • L'index idx_orders_details sur orders utilise une expression qui ne peut pas être écrite pour SQLite (a gin index) ; il n'est donc pas créé. Créez l'index à la main si les requêtes en ont besoin.
  • 1 date de "shipped_at" dans orders, que SQLite ne peut pas stocker (par exemple infinity), devient NULL. SQLite stocke les années 1 à 9999, sans infini ; remplacez ces dates dans la source si elles comptent.

Votre fichier est converti sur cet ordinateur et n'est jamais envoyé.

Autres exemples :

Ce qui change de PostgreSQL à SQLite

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.

  • boolean

    INTEGER 0 ou 1 avec un CHECK

    SQLite n'a pas de type booléen ; ses propres true et false valent 1 et 0.

  • varchar(n), char(n), text

    VARCHAR(n) et TEXT, non appliqués

    SQLite garde le type déclaré pour les outils mais ne limite pas la longueur.

  • numeric(p,s) past 15 digits and numeric without a precision

    TEXT

    SQLite garde environ 15 chiffres significatifs dans un nombre. Les nombres plus larges sont gardés en texte pour que chaque chiffre reste exact.

    Ligne du rapport: decimal_as_text

  • money

    NUMERIC

    SQLite n'a pas de type monétaire. Le montant est gardé comme nombre, sans le symbole monétaire ajouté par la locale du serveur.

    Ligne du rapport: type_replaced

  • interval

    TEXT avec le texte de PostgreSQL

    SQLite n'a pas de type intervalle ; le texte en garde chaque partie.

    Ligne du rapport: type_replaced

  • arrays (integer[], text[]...)

    TEXT avec un tableau JSON

    SQLite n'a pas de tableaux. Un tableau JSON garde chaque élément et NULL, et les fonctions JSON de SQLite le lisent.

    Ligne du rapport: type_replaced

  • ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types

    TEXT avec le texte de PostgreSQL

    SQLite n'a pas de type équivalent ; chaque valeur garde donc le texte écrit par PostgreSQL.

    Ligne du rapport: type_replaced

  • json, jsonb

    TEXT

    Les fonctions JSON de SQLite lisent le JSON depuis du texte.

  • timestamp

    DATETIME en texte ISO 8601

    SQLite stocke les dates en texte que ses fonctions de date savent lire.

  • timestamp with time zone

    TIMESTAMP en texte ISO 8601 en UTC

    SQLite n'a aucun type qui garde un décalage ; chaque instant est donc écrit en UTC : le même instant quel que soit le décalage écrit par le dump.

    Ligne du rapport: moments_as_utc

  • time

    TIME en texte

    SQLite garde les heures en texte, 24:00:00 compris.

  • infinity, -infinity and BC dates

    NULL

    Les fonctions de date de SQLite lisent les années 0 à 9999, sans infini. Ces valeurs deviennent NULL et le rapport les compte.

    Ligne du rapport: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    SQLite stocke NaN comme NULL et son infini ne survit pas à tous les outils ; ces valeurs deviennent donc NULL et le rapport les compte.

    Ligne du rapport: invalid_value_null

  • NOT NULL columns with values that become NULL

    NOT NULL retiré

    Une colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.

    Ligne du rapport: not_null_relaxed

  • enum types

    TEXT avec un CHECK de ses libellés

    Un texte avec une contrainte CHECK garde les mêmes valeurs.

  • enum columns holding values outside their labels

    TEXT sans CHECK

    Les valeurs absentes des libellés feraient échouer la contrainte CHECK, qui n'est donc pas créée.

    Ligne du rapport: enum_check_skipped

  • uuid, inet, cidr, macaddr

    TEXT

    SQLite n'a pas ces types ; le texte garde chaque valeur.

  • bytea

    BLOB

    Les octets restent des octets.

  • bit(n), bit varying

    INTEGER avec la valeur des bits jusqu'à 63 bits ; chiffres TEXT au-delà

    Une chaîne de bits est stockée comme le nombre que forment ses bits tant qu'il tient dans un entier signé.

  • oid, xid, cid

    INTEGER avec un CHECK qui interdit les négatifs

    Les entiers 64 bits de SQLite contiennent chaque valeur.

  • citext and nondeterministic collations

    comparaison exacte

    SQLite compare le texte exactement sauf indication contraire, et son NOCASE ne traite que les lettres ASCII.

    Ligne du rapport: case_insensitive_collation

  • serial, identity

    INTEGER PRIMARY KEY AUTOINCREMENT, qui reprend après l'identifiant le plus élevé

    SQLite compte une clé primaire entière de type entier, et AUTOINCREMENT empêche de réutiliser les identifiants, comme une séquence.

  • serial and identity columns that aren't the whole primary key

    INTEGER sans compteur

    SQLite ne compte qu'une colonne qui forme toute la clé primaire ; la colonne garde donc ses valeurs et les nouvelles lignes doivent fournir les leurs.

    Ligne du rapport: counter_dropped

  • sequences not owned by a column

    non créée

    SQLite n'a pas de séquences.

    Ligne du rapport: sequence_not_converted

  • generated columns

    GENERATED ALWAYS AS, STORED ou VIRTUAL comme dans la source

    SQLite 3.31 et versions ultérieures calculent les colonnes générées des deux mêmes façons.

  • generated columns with functions SQLite lacks

    une colonne simple avec les valeurs

    Une formule qui ne peut pas être écrite pour SQLite laisse une colonne simple avec les valeurs du dump et une ligne dans le rapport.

    Ligne du rapport: generated_not_translated

  • defaults with functions SQLite lacks, and defaults from a sequence

    aucune valeur par défaut

    Une valeur par défaut qui ne peut pas être écrite pour SQLite est omise et signalée.

    Ligne du rapport: default_not_translated

  • CHECK constraints

    traduites, en ligne dans CREATE TABLE

    SQLite n'accepte les contraintes CHECK que dans CREATE TABLE.

  • CHECK constraints with functions SQLite lacks

    non créée

    Une contrainte CHECK qui ne peut pas être écrite pour SQLite est omise et signalée.

    Ligne du rapport: check_skipped

  • CHECK ... NOT VALID

    non créée

    PostgreSQL n'a jamais vérifié les lignes déjà présentes, et SQLite les vérifierait au chargement.

    Ligne du rapport: check_not_valid

  • gin, gist, brin and hash indexes, partial and expression indexes

    non créé

    IntoSQL écrit des index b-tree sur des colonnes pour SQLite ; recréez les autres après le chargement.

    Ligne du rapport: index_skipped

  • foreign keys

    dans CREATE TABLE, chargées sans vérification, puis listées par PRAGMA foreign_key_check

    SQLite n'accepte les clés étrangères que dans CREATE TABLE et ne les vérifie qu'avec PRAGMA foreign_keys activé. Les lignes se chargent sans vérification et le script finit en listant toute ligne sans parent.

  • foreign keys to tables the dump doesn't create

    non créée

    Une clé ne peut pas désigner une table absente.

    Ligne du rapport: foreign_key_skipped

  • partitioned tables

    une seule table avec les lignes de chaque partition

    Les lignes sont les mêmes.

    Ligne du rapport: partitions_dropped

  • schemas

    un seul fichier, tables préfixées par le nom de leur schéma

    Un fichier SQLite est une seule base de données ; le nom du schéma distingue donc les tables de même nom, et celles de public gardent leur nom.

    Ligne du rapport: schemas_merged

  • views, functions, procedures, triggers, rules, policies, extensions and types

    listés dans le rapport

    Leur code est écrit dans le langage de PostgreSQL ; ils sont donc listés pour que vous les recréiez.

    Ligne du rapport: not_converted_objects

  • dumps without CREATE TABLE (--data-only)

    types déduits des valeurs

    Un dump de données seules ne contient que des lignes, donc les types viennent des valeurs.

    Ligne du rapport: no_schema

  • expressions in INSERT values

    NULL

    Un convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.

    Ligne du rapport: expression_value

  • types IntoSQL doesn't know

    TEXT

    Le texte accepte toute valeur ; changez le type après le chargement.

    Ligne du rapport: unknown_type

  • text that isn't valid in its encoding

    les octets invalides deviennent le caractère de remplacement

    Le texte SQLite est en UTF-8.

    Ligne du rapport: invalid_utf8_replaced

  • text decoded twice (ñ)

    copié tel quel

    Le dump contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.

    Ligne du rapport: mojibake_suspected

Dans PostgreSQLDans SQLiteLigne du rapport
booleanINTEGER 0 ou 1 avec un CHECKSQLite n'a pas de type booléen ; ses propres true et false valent 1 et 0.
varchar(n), char(n), textVARCHAR(n) et TEXT, non appliquésSQLite garde le type déclaré pour les outils mais ne limite pas la longueur.
numeric(p,s) past 15 digits and numeric without a precisionTEXTSQLite garde environ 15 chiffres significatifs dans un nombre. Les nombres plus larges sont gardés en texte pour que chaque chiffre reste exact.decimal_as_text
moneyNUMERICSQLite n'a pas de type monétaire. Le montant est gardé comme nombre, sans le symbole monétaire ajouté par la locale du serveur.type_replaced
intervalTEXT avec le texte de PostgreSQLSQLite n'a pas de type intervalle ; le texte en garde chaque partie.type_replaced
arrays (integer[], text[]...)TEXT avec un tableau JSONSQLite n'a pas de tableaux. Un tableau JSON garde chaque élément et NULL, et les fonctions JSON de SQLite le lisent.type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesTEXT avec le texte de PostgreSQLSQLite n'a pas de type équivalent ; chaque valeur garde donc le texte écrit par PostgreSQL.type_replaced
json, jsonbTEXTLes fonctions JSON de SQLite lisent le JSON depuis du texte.
timestampDATETIME en texte ISO 8601SQLite stocke les dates en texte que ses fonctions de date savent lire.
timestamp with time zoneTIMESTAMP en texte ISO 8601 en UTCSQLite n'a aucun type qui garde un décalage ; chaque instant est donc écrit en UTC : le même instant quel que soit le décalage écrit par le dump.moments_as_utc
timeTIME en texteSQLite garde les heures en texte, 24:00:00 compris.
infinity, -infinity and BC datesNULLLes fonctions de date de SQLite lisent les années 0 à 9999, sans infini. Ces valeurs deviennent NULL et le rapport les compte.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLSQLite stocke NaN comme NULL et son infini ne survit pas à tous les outils ; ces valeurs deviennent donc NULL et le rapport les compte.invalid_value_null
NOT NULL columns with values that become NULLNOT NULL retiréUne colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.not_null_relaxed
enum typesTEXT avec un CHECK de ses libellésUn texte avec une contrainte CHECK garde les mêmes valeurs.
enum columns holding values outside their labelsTEXT sans CHECKLes valeurs absentes des libellés feraient échouer la contrainte CHECK, qui n'est donc pas créée.enum_check_skipped
uuid, inet, cidr, macaddrTEXTSQLite n'a pas ces types ; le texte garde chaque valeur.
byteaBLOBLes octets restent des octets.
bit(n), bit varyingINTEGER avec la valeur des bits jusqu'à 63 bits ; chiffres TEXT au-delàUne chaîne de bits est stockée comme le nombre que forment ses bits tant qu'il tient dans un entier signé.
oid, xid, cidINTEGER avec un CHECK qui interdit les négatifsLes entiers 64 bits de SQLite contiennent chaque valeur.
citext and nondeterministic collationscomparaison exacteSQLite compare le texte exactement sauf indication contraire, et son NOCASE ne traite que les lettres ASCII.case_insensitive_collation
serial, identityINTEGER PRIMARY KEY AUTOINCREMENT, qui reprend après l'identifiant le plus élevéSQLite compte une clé primaire entière de type entier, et AUTOINCREMENT empêche de réutiliser les identifiants, comme une séquence.
serial and identity columns that aren't the whole primary keyINTEGER sans compteurSQLite ne compte qu'une colonne qui forme toute la clé primaire ; la colonne garde donc ses valeurs et les nouvelles lignes doivent fournir les leurs.counter_dropped
sequences not owned by a columnnon crééeSQLite n'a pas de séquences.sequence_not_converted
generated columnsGENERATED ALWAYS AS, STORED ou VIRTUAL comme dans la sourceSQLite 3.31 et versions ultérieures calculent les colonnes générées des deux mêmes façons.
generated columns with functions SQLite lacksune colonne simple avec les valeursUne formule qui ne peut pas être écrite pour SQLite laisse une colonne simple avec les valeurs du dump et une ligne dans le rapport.generated_not_translated
defaults with functions SQLite lacks, and defaults from a sequenceaucune valeur par défautUne valeur par défaut qui ne peut pas être écrite pour SQLite est omise et signalée.default_not_translated
CHECK constraintstraduites, en ligne dans CREATE TABLESQLite n'accepte les contraintes CHECK que dans CREATE TABLE.
CHECK constraints with functions SQLite lacksnon crééeUne contrainte CHECK qui ne peut pas être écrite pour SQLite est omise et signalée.check_skipped
CHECK ... NOT VALIDnon crééePostgreSQL n'a jamais vérifié les lignes déjà présentes, et SQLite les vérifierait au chargement.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexesnon crééIntoSQL écrit des index b-tree sur des colonnes pour SQLite ; recréez les autres après le chargement.index_skipped
foreign keysdans CREATE TABLE, chargées sans vérification, puis listées par PRAGMA foreign_key_checkSQLite n'accepte les clés étrangères que dans CREATE TABLE et ne les vérifie qu'avec PRAGMA foreign_keys activé. Les lignes se chargent sans vérification et le script finit en listant toute ligne sans parent.
foreign keys to tables the dump doesn't createnon crééeUne clé ne peut pas désigner une table absente.foreign_key_skipped
partitioned tablesune seule table avec les lignes de chaque partitionLes lignes sont les mêmes.partitions_dropped
schemasun seul fichier, tables préfixées par le nom de leur schémaUn fichier SQLite est une seule base de données ; le nom du schéma distingue donc les tables de même nom, et celles de public gardent leur nom.schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and typeslistés dans le rapportLeur code est écrit dans le langage de PostgreSQL ; ils sont donc listés pour que vous les recréiez.not_converted_objects
dumps without CREATE TABLE (--data-only)types déduits des valeursUn dump de données seules ne contient que des lignes, donc les types viennent des valeurs.no_schema
expressions in INSERT valuesNULLUn convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.expression_value
types IntoSQL doesn't knowTEXTLe texte accepte toute valeur ; changez le type après le chargement.unknown_type
text that isn't valid in its encodingles octets invalides deviennent le caractère de remplacementLe texte SQLite est en UTF-8.invalid_utf8_replaced
text decoded twice (ñ)copié tel quelLe dump contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.mojibake_suspected

Charger le script dans SQLite

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.

sqlite3 -bail mydb.sqlite < postgresql.sqlite.sql

Les clés étrangères sont déclarées dans chaque table et les lignes se chargent sans vérification des clés étrangères. Le script liste ensuite toute ligne qui pointe vers une ligne qui n'existe pas, au lieu d'échouer à mi-chemin.

Pour un gros dump, chargez-le dans un nouveau fichier sur un disque local. Le script charge tout dans une seule transaction sans synchronisation, il va donc à la vitesse du disque, et un chargement interrompu ne laisse aucune table partielle.

La ligne de commande charge le fichier directement dans une base SQLite, sans écrire de script. C'est gratuit.

Faire le dump PostgreSQL pour un meilleur résultat

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

  • --format=plain, le format par défaut de pg_dump, écrit du SQL. Une archive custom ou directory (-Fc, -Fd) devient du SQL avec pg_restore -f dump.sql, sans serveur de base de données.
  • --no-owner --no-privileges omettent les rôles et les droits, que le convertisseur ignore de toute façon ; le dump est donc plus petit.
  • pg_dumpall met toutes les bases de données dans un seul fichier ; les tables de chacune sont préfixées par son nom, donc rien n'entre en collision.

Ce qui n'est pas converti

Les vues, vues matérialisées, fonctions, procédures, déclencheurs, règles, politiques de sécurité des lignes, extensions et types sont écrits dans le langage propre à PostgreSQL. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour SQLite.

Questions sur PostgreSQL vers SQLite

Pas de réponse ici ? Écrivez-nous depuis la page de contact, une personne vous répond. Page de contact

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.

Lit-il les archives pg_dump -Fc ?

Pas directement : une archive custom est un format binaire. pg_restore -f dump.sql dump.backup la transforme en SQL texte que le convertisseur lit, sans se connecter à un serveur. Le convertisseur le signale quand il reçoit une archive.

De quelles versions de PostgreSQL le dump peut-il venir ?

Les dumps écrits par pg_dump et pg_dumpall depuis PostgreSQL 10, avec des lignes COPY ou INSERT. Chaque dump de test vient de PostgreSQL 13 et 18 et est comparé à sa source cellule par cellule.

Les valeurs serial et identity sont-elles conservées ?

Une colonne serial ou identity qui forme toute la clé primaire de la table devient INTEGER PRIMARY KEY AUTOINCREMENT, chaque ligne garde son identifiant, et le prochain identifiant reprend après le plus élevé. Toute autre garde ses valeurs sans compteur, et le rapport le signale.

Que deviennent les tableaux, les enums et les autres types PostgreSQL ?

Les tableaux deviennent des tableaux JSON, les booléens 0 et 1, les enums du texte avec un CHECK de leurs libellés, et les timestamps avec fuseau horaire du texte UTC. Les numeric larges restent exacts en texte. Les plages, types géométriques et types composites gardent le texte de PostgreSQL.

Et les fonctions, les déclencheurs et les vues ?

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 SQLite le script se charge-t-il ?

SQLite 3.31 et versions ultérieures. Chaque dump de test se charge sur 3.31 et 3.54, et s'arrête à la première erreur en cas de problème.