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.
18 rijen geconverteerd, 3 correcties, geen afgewezen
Tabellen in shop_2024_postgres.sqlPostgreSQL 18.6-dump · geschreven door pg_dump · utf8mb4
customers8 rijen2
8 kolommen id INTEGER not null name TEXT not null email TEXT not null country VARCHAR(2) not null is_active INTEGER not null tags TEXT not null signed_up DATE created_at TIMESTAMP not null orders10 rijen1
10 kolommen id INTEGER not null customer_id INTEGER not null status TEXT not null total DECIMAL(10,2) not null items INTEGER not null ordered_at DATETIME not null shipped_at DATETIME note TEXT details TEXT delivery TEXT
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
- "created_at" van customers bevat momenten met een tijdzone; SQLite heeft geen type dat die bewaart, dus ze worden in UTC opgeslagen als TIMESTAMP.
- "tags" van customers is text[], wat SQLite niet heeft, dus het is TEXT met dezelfde waarden.
- "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 PostgreSQL | In SQLite | Rapportregel |
|---|---|---|
| boolean | INTEGER 0 of 1 met een CHECKSQLite heeft geen boolean-type; zijn eigen true en false zijn 1 en 0. | |
| varchar(n), char(n), text | VARCHAR(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 precision | TEXTSQLite bewaart ongeveer 15 significante cijfers in een getal. Bredere getallen blijven tekst, zodat elk cijfer exact blijft. | decimal_as_text |
| money | NUMERICSQLite heeft geen money-type. Het bedrag blijft een getal, zonder het valutasymbool dat de locale van de server toevoegde. | type_replaced |
| interval | TEXT 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 types | TEXT met de tekst van PostgreSQLSQLite heeft geen gelijkwaardig type, dus elke waarde behoudt de tekst die PostgreSQL schreef. | type_replaced |
| json, jsonb | TEXTDe JSON-functies van SQLite lezen JSON uit tekst. | |
| timestamp | DATETIME als ISO 8601-tekstSQLite slaat datums op als tekst die zijn datumfuncties lezen. | |
| timestamp with time zone | TIMESTAMP 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 |
| time | TIME als tekstSQLite bewaart tijden als tekst, 24:00:00 inbegrepen. | |
| infinity, -infinity and BC dates | NULLDe 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 precision | NULLSQLite 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 NULL | NOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen. | not_null_relaxed |
| enum types | TEXT met een CHECK op de labelsTekst met een check houdt dezelfde waarden. | |
| enum columns holding values outside their labels | TEXT 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, macaddr | TEXTSQLite heeft zulke typen niet; de tekst behoudt elke waarde. | |
| bytea | BLOBBytes blijven bytes. | |
| bit(n), bit varying | INTEGER 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, cid | INTEGER met een CHECK dat het niet negatief isDe 64-bits gehele getallen van SQLite bevatten elke waarde. | |
| citext and nondeterministic collations | exacte vergelijkingSQLite vergelijkt tekst exact, tenzij anders aangegeven, en zijn NOCASE negeert alleen hoofdletters bij ASCII-letters. | case_insensitive_collation |
| serial, identity | INTEGER 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 key | INTEGER 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 column | niet aangemaaktSQLite heeft geen sequences. | sequence_not_converted |
| generated columns | GENERATED 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 lacks | een 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 sequence | geen standaardwaardeEen standaardwaarde die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld. | default_not_translated |
| CHECK constraints | vertaald, inline in CREATE TABLESQLite accepteert checks alleen in CREATE TABLE. | |
| CHECK constraints with functions SQLite lacks | niet aangemaaktEen check die niet voor SQLite kan worden geschreven, wordt weggelaten en gemeld. | check_skipped |
| CHECK ... NOT VALID | niet 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 indexes | niet aangemaaktIntoSQL schrijft voor SQLite b-tree-indexen op kolommen; maak de andere na het laden opnieuw aan. | index_skipped |
| foreign keys | in 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 create | niet 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 types | vermeld 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 values | NULLEen converter die geen database draait, kan ze niet evalueren. | expression_value |
| types IntoSQL doesn't know | TEXTTekst kan elke waarde bevatten; wijzig het type na het laden. | unknown_type |
| text that isn't valid in its encoding | de 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.sqlRefererende 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.