Naar de inhoud
IntoSQL-startpagina

PostgreSQL omzetten naar SQLite

Zet een gewone dump van pg_dump of pg_dumpall neer, als .sql of .sql.gz, en download een SQLite-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die SQLite niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.

Je bestand
sqlshop_2024_postgres.sqlVoorbeeldbestand, 6,2 kB
Je database

18 rijen geconverteerd, 3 correcties, geen afgewezen

Tonen

Tabellen in shop_2024_postgres.sqlPostgreSQL 18.6-dump · geschreven door pg_dump · utf8mb4

  • customers8 rijen2
    8 kolommen
    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 rijen1
    10 kolommen
    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

Niet geconverteerd

  • Weergave paid_orders

Elke database schrijft deze in een eigen taal. Herschrijf ze voor 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;

Correcties

  1. "created_at" van customers bevat momenten met een tijdzone; SQLite heeft geen type dat die bewaart, dus ze worden in UTC opgeslagen als TIMESTAMP.
  2. "tags" van customers is text[], wat SQLite niet heeft, dus het is TEXT met dezelfde waarden.
  3. "delivery" van orders is interval, wat SQLite niet heeft, dus het is TEXT met dezelfde waarden.

Na te kijken

  • 1 weergave, trigger, routine of gebeurtenis is niet geconverteerd; het rapport noemt ze allemaal. Maak ze met de hand opnieuw aan in SQLite.
  • De standaardwaarde van "tags" in customers kan niet voor SQLite worden geschreven (a value its type can't hold), dus de kolom heeft geen standaardwaarde. Voeg de standaardwaarde met de hand toe als nieuwe rijen die nodig hebben.
  • De index idx_orders_details op orders gebruikt een expressie die niet voor SQLite kan worden geschreven (a gin index), dus hij wordt niet aangemaakt. Maak de index met de hand aan als query's hem nodig hebben.
  • 1 waarde in "shipped_at" van orders is een datum die SQLite niet kan opslaan, zoals infinity, dus die is NULL. SQLite slaat jaren 1 tot en met 9999 op, zonder oneindig; vervang die datums in de bron als ze ertoe doen.

Je bestand wordt op deze computer omgezet en nooit geüpload.

Andere voorbeelden:

Wat er verandert van PostgreSQL naar SQLite

Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.

  • boolean

    INTEGER 0 of 1 met een CHECK

    SQLite heeft geen boolean-type; zijn eigen true en false zijn 1 en 0.

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

    VARCHAR(n) en TEXT, niet afgedwongen

    SQLite bewaart het gedeclareerde type zodat tools het kunnen lezen, maar beperkt de lengte niet.

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

    TEXT

    SQLite bewaart ongeveer 15 significante cijfers in een getal. Bredere getallen blijven tekst, zodat elk cijfer exact blijft.

    Rapportregel: decimal_as_text

  • money

    NUMERIC

    SQLite heeft geen money-type. Het bedrag blijft een getal, zonder het valutasymbool dat de locale van de server toevoegde.

    Rapportregel: type_replaced

  • interval

    TEXT met de tekst van PostgreSQL

    SQLite heeft geen interval-type; de tekst behoudt elk deel.

    Rapportregel: type_replaced

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

    TEXT met een JSON-array

    SQLite heeft geen arrays. Een JSON-array behoudt elk element en NULL, en de JSON-functies van SQLite lezen hem.

    Rapportregel: type_replaced

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

    TEXT met de tekst van PostgreSQL

    SQLite heeft geen gelijkwaardig type, dus elke waarde behoudt de tekst die PostgreSQL schreef.

    Rapportregel: type_replaced

  • json, jsonb

    TEXT

    De JSON-functies van SQLite lezen JSON uit tekst.

  • timestamp

    DATETIME als ISO 8601-tekst

    SQLite slaat datums op als tekst die zijn datumfuncties lezen.

  • timestamp with time zone

    TIMESTAMP als ISO 8601-tekst in UTC

    SQLite heeft geen type dat een offset bewaart, dus elk moment wordt in UTC geschreven: hetzelfde moment, welke offset de dump ook schreef.

    Rapportregel: moments_as_utc

  • time

    TIME als tekst

    SQLite bewaart tijden als tekst, 24:00:00 inbegrepen.

  • infinity, -infinity and BC dates

    NULL

    De datumfuncties van SQLite lezen jaren 0 tot en met 9999, zonder oneindig. Die waarden worden NULL en het rapport telt ze.

    Rapportregel: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    SQLite slaat NaN op als NULL en zijn oneindig overleeft niet elke tool, dus die waarden worden NULL en het rapport telt ze.

    Rapportregel: invalid_value_null

  • NOT NULL columns with values that become NULL

    NOT NULL weggelaten

    Een kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.

    Rapportregel: not_null_relaxed

  • enum types

    TEXT met een CHECK op de labels

    Tekst met een check houdt dezelfde waarden.

  • enum columns holding values outside their labels

    TEXT zonder check

    Waarden die niet bij de labels horen, zouden de check laten mislukken, dus de check wordt niet aangemaakt.

    Rapportregel: enum_check_skipped

  • uuid, inet, cidr, macaddr

    TEXT

    SQLite heeft zulke typen niet; de tekst behoudt elke waarde.

  • bytea

    BLOB

    Bytes blijven bytes.

  • bit(n), bit varying

    INTEGER met de waarde van de bits tot 63 bits; daarboven TEXT-cijfers

    Een bitstring wordt opgeslagen als het getal dat zijn bits vormen, zolang dat in een signed geheel getal past.

  • oid, xid, cid

    INTEGER met een CHECK dat het niet negatief is

    De 64-bits gehele getallen van SQLite bevatten elke waarde.

  • citext and nondeterministic collations

    exacte vergelijking

    SQLite vergelijkt tekst exact, tenzij anders aangegeven, en zijn NOCASE negeert alleen hoofdletters bij ASCII-letters.

    Rapportregel: case_insensitive_collation

  • serial, identity

    INTEGER PRIMARY KEY AUTOINCREMENT, verdergaand na het hoogste id

    SQLite telt een hele primaire sleutel van gehele getallen, en AUTOINCREMENT voorkomt dat id's opnieuw worden gebruikt, zoals een sequence doet.

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

    INTEGER zonder teller

    SQLite telt alleen een kolom die de hele primaire sleutel is, dus de kolom behoudt zijn waarden en nieuwe rijen hebben hun eigen waarden nodig.

    Rapportregel: counter_dropped

  • sequences not owned by a column

    niet aangemaakt

    SQLite heeft geen sequences.

    Rapportregel: sequence_not_converted

  • generated columns

    GENERATED ALWAYS AS, STORED of VIRTUAL zoals in de bron

    SQLite 3.31 en later berekenen gegenereerde kolommen op dezelfde twee manieren.

  • generated columns with functions SQLite lacks

    een gewone kolom met de waarden

    Een formule die niet voor SQLite kan worden geschreven, levert een gewone kolom met de waarden uit de dump en een regel in het rapport op.

    Rapportregel: generated_not_translated

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

    geen standaardwaarde

    Een standaardwaarde die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: default_not_translated

  • CHECK constraints

    vertaald, inline in CREATE TABLE

    SQLite accepteert checks alleen in CREATE TABLE.

  • CHECK constraints with functions SQLite lacks

    niet aangemaakt

    Een check die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: check_skipped

  • CHECK ... NOT VALID

    niet aangemaakt

    PostgreSQL heeft de rijen die er al waren nooit gecontroleerd, en SQLite zou ze tijdens het laden controleren.

    Rapportregel: check_not_valid

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

    niet aangemaakt

    IntoSQL schrijft voor SQLite b-tree-indexen op kolommen; maak de andere na het laden opnieuw aan.

    Rapportregel: index_skipped

  • foreign keys

    in CREATE TABLE, ongecontroleerd geladen, daarna opgesomd door PRAGMA foreign_key_check

    SQLite accepteert refererende sleutels alleen in CREATE TABLE en controleert ze alleen met PRAGMA foreign_keys aan. De rijen laden ongecontroleerd en het script somt aan het einde elke rij zonder ouder op.

  • foreign keys to tables the dump doesn't create

    niet aangemaakt

    Een sleutel kan niet verwijzen naar een tabel die er niet is.

    Rapportregel: foreign_key_skipped

  • partitioned tables

    één tabel met de rijen van elke partitie

    De rijen zijn dezelfde.

    Rapportregel: partitions_dropped

  • schemas

    één bestand, tabellen met de naam van hun schema ervoor

    Een SQLite-bestand is één database, dus de schemanaam houdt tabellen met dezelfde naam uit elkaar; tabellen in public behouden hun naam.

    Rapportregel: schemas_merged

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

    vermeld in het rapport

    Hun code is geschreven in de taal van PostgreSQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.

    Rapportregel: not_converted_objects

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

    typen afgeleid uit de waarden

    Een dump met alleen data bevat alleen rijen, dus de typen komen uit de waarden.

    Rapportregel: no_schema

  • expressions in INSERT values

    NULL

    Een converter die geen database draait, kan ze niet evalueren.

    Rapportregel: expression_value

  • types IntoSQL doesn't know

    TEXT

    Tekst kan elke waarde bevatten; wijzig het type na het laden.

    Rapportregel: unknown_type

  • text that isn't valid in its encoding

    de foute bytes als het vervangingsteken

    Tekst in SQLite is UTF-8.

    Rapportregel: invalid_utf8_replaced

  • text decoded twice (ñ)

    ongewijzigd gekopieerd

    De dump bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.

    Rapportregel: mojibake_suspected

In PostgreSQLIn SQLiteRapportregel
booleanINTEGER 0 of 1 met een CHECKSQLite heeft geen boolean-type; zijn eigen true en false zijn 1 en 0.
varchar(n), char(n), textVARCHAR(n) en TEXT, niet afgedwongenSQLite bewaart het gedeclareerde type zodat tools het kunnen lezen, maar beperkt de lengte niet.
numeric(p,s) past 15 digits and numeric without a precisionTEXTSQLite bewaart ongeveer 15 significante cijfers in een getal. Bredere getallen blijven tekst, zodat elk cijfer exact blijft.decimal_as_text
moneyNUMERICSQLite heeft geen money-type. Het bedrag blijft een getal, zonder het valutasymbool dat de locale van de server toevoegde.type_replaced
intervalTEXT met de tekst van PostgreSQLSQLite heeft geen interval-type; de tekst behoudt elk deel.type_replaced
arrays (integer[], text[]...)TEXT met een JSON-arraySQLite heeft geen arrays. Een JSON-array behoudt elk element en NULL, en de JSON-functies van SQLite lezen hem.type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesTEXT met de tekst van PostgreSQLSQLite heeft geen gelijkwaardig type, dus elke waarde behoudt de tekst die PostgreSQL schreef.type_replaced
json, jsonbTEXTDe JSON-functies van SQLite lezen JSON uit tekst.
timestampDATETIME als ISO 8601-tekstSQLite slaat datums op als tekst die zijn datumfuncties lezen.
timestamp with time zoneTIMESTAMP als ISO 8601-tekst in UTCSQLite heeft geen type dat een offset bewaart, dus elk moment wordt in UTC geschreven: hetzelfde moment, welke offset de dump ook schreef.moments_as_utc
timeTIME als tekstSQLite bewaart tijden als tekst, 24:00:00 inbegrepen.
infinity, -infinity and BC datesNULLDe datumfuncties van SQLite lezen jaren 0 tot en met 9999, zonder oneindig. Die waarden worden NULL en het rapport telt ze.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLSQLite slaat NaN op als NULL en zijn oneindig overleeft niet elke tool, dus die waarden worden NULL en het rapport telt ze.invalid_value_null
NOT NULL columns with values that become NULLNOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.not_null_relaxed
enum typesTEXT met een CHECK op de labelsTekst met een check houdt dezelfde waarden.
enum columns holding values outside their labelsTEXT zonder checkWaarden die niet bij de labels horen, zouden de check laten mislukken, dus de check wordt niet aangemaakt.enum_check_skipped
uuid, inet, cidr, macaddrTEXTSQLite heeft zulke typen niet; de tekst behoudt elke waarde.
byteaBLOBBytes blijven bytes.
bit(n), bit varyingINTEGER met de waarde van de bits tot 63 bits; daarboven TEXT-cijfersEen bitstring wordt opgeslagen als het getal dat zijn bits vormen, zolang dat in een signed geheel getal past.
oid, xid, cidINTEGER met een CHECK dat het niet negatief isDe 64-bits gehele getallen van SQLite bevatten elke waarde.
citext and nondeterministic collationsexacte vergelijkingSQLite vergelijkt tekst exact, tenzij anders aangegeven, en zijn NOCASE negeert alleen hoofdletters bij ASCII-letters.case_insensitive_collation
serial, identityINTEGER PRIMARY KEY AUTOINCREMENT, verdergaand na het hoogste idSQLite telt een hele primaire sleutel van gehele getallen, en AUTOINCREMENT voorkomt dat id's opnieuw worden gebruikt, zoals een sequence doet.
serial and identity columns that aren't the whole primary keyINTEGER zonder tellerSQLite telt alleen een kolom die de hele primaire sleutel is, dus de kolom behoudt zijn waarden en nieuwe rijen hebben hun eigen waarden nodig.counter_dropped
sequences not owned by a columnniet aangemaaktSQLite heeft geen sequences.sequence_not_converted
generated columnsGENERATED ALWAYS AS, STORED of VIRTUAL zoals in de bronSQLite 3.31 en later berekenen gegenereerde kolommen op dezelfde twee manieren.
generated columns with functions SQLite lackseen gewone kolom met de waardenEen formule die niet voor SQLite kan worden geschreven, levert een gewone kolom met de waarden uit de dump en een regel in het rapport op.generated_not_translated
defaults with functions SQLite lacks, and defaults from a sequencegeen standaardwaardeEen standaardwaarde die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld.default_not_translated
CHECK constraintsvertaald, inline in CREATE TABLESQLite accepteert checks alleen in CREATE TABLE.
CHECK constraints with functions SQLite lacksniet aangemaaktEen check die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld.check_skipped
CHECK ... NOT VALIDniet aangemaaktPostgreSQL heeft de rijen die er al waren nooit gecontroleerd, en SQLite zou ze tijdens het laden controleren.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexesniet aangemaaktIntoSQL schrijft voor SQLite b-tree-indexen op kolommen; maak de andere na het laden opnieuw aan.index_skipped
foreign keysin CREATE TABLE, ongecontroleerd geladen, daarna opgesomd door PRAGMA foreign_key_checkSQLite accepteert refererende sleutels alleen in CREATE TABLE en controleert ze alleen met PRAGMA foreign_keys aan. De rijen laden ongecontroleerd en het script somt aan het einde elke rij zonder ouder op.
foreign keys to tables the dump doesn't createniet aangemaaktEen sleutel kan niet verwijzen naar een tabel die er niet is.foreign_key_skipped
partitioned tableséén tabel met de rijen van elke partitieDe rijen zijn dezelfde.partitions_dropped
schemaséén bestand, tabellen met de naam van hun schema ervoorEen SQLite-bestand is één database, dus de schemanaam houdt tabellen met dezelfde naam uit elkaar; tabellen in public behouden hun naam.schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and typesvermeld in het rapportHun code is geschreven in de taal van PostgreSQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.not_converted_objects
dumps without CREATE TABLE (--data-only)typen afgeleid uit de waardenEen dump met alleen data bevat alleen rijen, dus de typen komen uit de waarden.no_schema
expressions in INSERT valuesNULLEen converter die geen database draait, kan ze niet evalueren.expression_value
types IntoSQL doesn't knowTEXTTekst kan elke waarde bevatten; wijzig het type na het laden.unknown_type
text that isn't valid in its encodingde foute bytes als het vervangingstekenTekst in SQLite is UTF-8.invalid_utf8_replaced
text decoded twice (ñ)ongewijzigd gekopieerdDe dump bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.mojibake_suspected

Het script in SQLite laden

Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.

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

Refererende sleutels worden in elke tabel gedeclareerd en de rijen laden met de controle op refererende sleutels uit. Daarna somt het script elke rij op die naar een niet-bestaande rij verwijst, in plaats van halverwege te mislukken.

Laad een grote dump in een nieuw bestand op een lokale schijf. Het script laadt alles in één transactie met synchronisatie uit, dus het draait op schijfsnelheid, en een laadactie die halverwege stopt, laat geen halve tabellen achter.

De opdrachtregel laadt het bestand rechtstreeks in een SQLite-database, zonder een script te schrijven. Dat is gratis.

Een dump van PostgreSQL maken voor het beste resultaat

De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:

  • --format=plain, de standaard van pg_dump, schrijft SQL. Een custom- of directoryarchief (-Fc, -Fd) wordt SQL met pg_restore -f dump.sql, zonder databaseserver.
  • --no-owner --no-privileges laten rollen en rechten weg, die de converter toch overslaat, dus de dump wordt kleiner.
  • pg_dumpall zet elke database in één bestand; de tabellen van elke database krijgen de naam ervan, dus niets botst.

Wat niet wordt geconverteerd

Weergaven, gematerialiseerde weergaven, functies, procedures, triggers, regels, beveiligingsbeleid voor rijen, extensies en typen zijn geschreven in de eigen taal van PostgreSQL. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor SQLite.

Vragen over PostgreSQL naar SQLite

Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina

Wordt mijn dump geüpload?

Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.

Hoe groot mag de dump zijn?

De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.

Leest het pg_dump -Fc-archieven?

Niet direct: een custom-archief is een binair formaat. pg_restore -f dump.sql dump.backup zet het om naar de gewone SQL die de converter leest, zonder verbinding met een server. De converter meldt dat als hij een archief krijgt.

Van welke PostgreSQL-versies kan de dump komen?

Dumps geschreven door pg_dump en pg_dumpall vanaf PostgreSQL 10, met rijen als COPY of INSERT. Elke testdump komt van PostgreSQL 13 en 18 en wordt cel voor cel met zijn bron vergeleken.

Blijven serial- en identity-waarden behouden?

Een serial- of identity-kolom die de hele primaire sleutel van de tabel is, wordt INTEGER PRIMARY KEY AUTOINCREMENT, elke rij behoudt zijn id, en het volgende id gaat verder na het hoogste. Elke andere behoudt zijn waarden zonder teller, en het rapport meldt dat.

Wat gebeurt er met arrays, enums en andere PostgreSQL-typen?

Arrays worden JSON-arrays, booleans 0 en 1, enums tekst met een check op hun labels, en timestamps met tijdzone UTC-tekst. Brede numerics blijven exact als tekst. Ranges, geometrische typen en samengestelde typen behouden de tekst van PostgreSQL.

En functies, triggers en weergaven?

Ze staan op naam in het rapport en worden niet geconverteerd, omdat elke database ze in een eigen taal schrijft.

Op welke SQLite-versies laadt het script?

SQLite 3.31 en later. Elke testdump laadt op 3.31 en 3.54 en stopt bij de eerste fout als er iets misgaat.