Naar de inhoud
IntoSQL-startpagina

PostgreSQL omzetten naar MariaDB

Zet een gewone dump van pg_dump of pg_dumpall neer, als .sql of .sql.gz, en download een MariaDB-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die MariaDB 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
    idint not null
    nametext not null
    emailvarchar(768) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    tagsjson not null
    signed_update
    created_atdatetime(6) not null
  • orders10 rijen1
    10 kolommen
    idint not null
    customer_idint not null
    statusenum('pending','paid','shipped','cancelled') not null
    totaldecimal(10,2) not null
    itemssmallint not null
    ordered_atdatetime(6) not null
    shipped_atdatetime(6)
    notetext
    detailsjson
    deliveryvarchar(100)

Niet geconverteerd

  • Weergave paid_orders

Elke database schrijft deze in een eigen taal. Herschrijf ze voor MariaDB.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `customers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `email` varchar(768) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `tags` json NOT NULL,
  `signed_up` date,
  `created_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  UNIQUE KEY `customers_email_key` (`email`),
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `customer_id` int NOT NULL,
  `status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` smallint NOT NULL DEFAULT 1,
  `ordered_at` datetime(6) NOT NULL,
  `shipped_at` datetime(6),
  `note` text,
  `details` json,
  `delivery` varchar(100),
  PRIMARY KEY (`id`),
  KEY `idx_orders_customer` (`customer_id`),
  KEY `idx_orders_status_date` (`status`,`ordered_at`),
  CONSTRAINT `orders_total_check` CHECK (`total` >= (0)),
  CONSTRAINT `orders_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=5001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

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);

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Correcties

  1. "created_at" van customers bevat momenten met een tijdzone; MariaDB heeft geen type dat die bewaart, dus ze worden in UTC opgeslagen als datetime(6).
  2. "tags" van customers is text[], wat MariaDB niet heeft, dus het is json met dezelfde waarden.
  3. "delivery" van orders is interval, wat MariaDB niet heeft, dus het is varchar(100) 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 MariaDB.
  • De standaardwaarde van "tags" in customers kan niet voor MariaDB 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 MariaDB kan worden geschreven (neither MySQL 5.7 nor MariaDB index an expression), 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 MariaDB niet kan opslaan, zoals infinity, dus die is NULL. MariaDB 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 MariaDB

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

  • boolean

    tinyint(1)

    BOOLEAN in MariaDB is TINYINT(1): true is 1 en false is 0.

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

    varchar(n) tot 1024 tekens, char(n) tot 255, daarboven text

    Text behoudt elk teken als utf8mb4. Een kolom in een sleutel is hooguit varchar(768), het langste wat een sleutel bevat.

  • numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds

    varchar

    decimal in MariaDB bevat 65 cijfers met 30 decimalen. Bredere getallen blijven tekst, zodat elk cijfer exact blijft; numeric zonder precisie wordt decimal(65,30) als de waarden passen.

    Rapportregel: decimal_as_text

  • money

    decimal(19,2)

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

    Rapportregel: type_replaced

  • interval

    varchar(100) met de tekst van PostgreSQL

    TIME in MariaDB bevat duren tot 838 uur, maar een interval heeft maanden en dagen; de tekst behoudt elk deel.

    Rapportregel: type_replaced

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

    json-arrays

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

    Rapportregel: type_replaced

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

    longtext met de tekst van PostgreSQL

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

    Rapportregel: type_replaced

  • json, jsonb

    json

    Dezelfde JSON-waarden; de volgorde van sleutels en de spaties van jsonb zijn die van de server.

  • timestamp

    datetime(p)

    Een timestamp zonder tijdzone is een kloktijd, net als datetime.

  • timestamp with time zone

    datetime(p) in UTC

    TIMESTAMP in MariaDB reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset de dump ook schreef.

    Rapportregel: moments_as_utc

  • time

    time(p)

    TIME in MariaDB bevat elk tijdstip van de dag, 24:00:00 inbegrepen.

  • infinity, -infinity, BC dates and years past 9999

    NULL

    MariaDB slaat jaren 1000 tot en met 9999 op, 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

    Getallen in MariaDB kennen geen NaN of Infinity, 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

    enum(...) met dezelfde labels

    ENUM in MariaDB behoudt de labels in hun volgorde.

  • uuid, inet, cidr

    uuid als uuid, inet en cidr als varchar(43)

    MariaDB heeft een uuid-type; adressen behouden hun tekst, inclusief masker.

  • bytea

    blob, mediumblob of longblob; varbinary(3072) in een sleutel

    Bytes blijven bytes.

  • bit(n)

    bit(n) tot 64, daarboven text

    Een bitstring tot 64 bits is het getal dat zijn bits vormen; een langere behoudt zijn cijfers.

  • citext and nondeterministic collations

    exacte vergelijking

    Tabellen gebruiken utf8mb4_bin, zodat tekst exact wordt vergeleken, zoals in PostgreSQL; kolommen die in de bron hoofdletters negeerden, verliezen dat.

    Rapportregel: case_insensitive_collation

  • serial, identity

    AUTO_INCREMENT, verdergaand na het hoogste id

    De kolom vooraan in de primaire sleutel telt; de teller gaat verder waar de sequence was.

  • a second serial or identity column in a table

    geheel getal

    MariaDB telt één kolom per tabel; elke andere behoudt zijn waarden zonder teller.

    Rapportregel: counter_dropped

  • sequences not owned by a column

    CREATE SEQUENCE, op de waarde die hij als volgende uitgeeft

    Sequences in MariaDB werken op dezelfde manier.

  • generated columns

    gegenereerde kolommen, STORED zoals in de bron

    MariaDB berekent ze op dezelfde manier.

  • generated columns with functions MariaDB lacks

    een gewone kolom

    Een formule die niet voor MariaDB kan worden geschreven, levert een gewone kolom en een regel in het rapport op.

    Rapportregel: generated_not_translated

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

    geen standaardwaarde

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

    Rapportregel: default_not_translated

  • CHECK constraints

    vertaald, inline in CREATE TABLE

    MySQL 8.0.16 en MariaDB dwingen ze af; MySQL 5.7 bewaart ze zonder te controleren.

  • CHECK constraints with functions MariaDB lacks

    niet aangemaakt

    Een check die niet voor MariaDB 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, dus ze kunnen hem schenden.

    Rapportregel: check_not_valid

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

    niet aangemaakt

    MariaDB heeft alleen b-tree-, full-text- en ruimtelijke indexen, op hele kolommen, zonder WHERE.

    Rapportregel: index_skipped

  • foreign keys

    refererende sleutels, geladen met FOREIGN_KEY_CHECKS=0

    De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen.

  • 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; partitioneer de tabel opnieuw in MariaDB als dat nodig is.

    Rapportregel: partitions_dropped

  • schemas

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

    Schema's in MariaDB zijn databases, die een script dat in één database laadt niet kan aanmaken; 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

    longtext

    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 moet geldige utf8mb4 zijn.

    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 MariaDBRapportregel
booleantinyint(1)BOOLEAN in MariaDB is TINYINT(1): true is 1 en false is 0.
varchar(n), char(n), textvarchar(n) tot 1024 tekens, char(n) tot 255, daarboven textText behoudt elk teken als utf8mb4. Een kolom in een sleutel is hooguit varchar(768), het langste wat een sleutel bevat.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holdsvarchardecimal in MariaDB bevat 65 cijfers met 30 decimalen. Bredere getallen blijven tekst, zodat elk cijfer exact blijft; numeric zonder precisie wordt decimal(65,30) als de waarden passen.decimal_as_text
moneydecimal(19,2)MariaDB heeft geen money-type. Het bedrag blijft een getal, zonder het valutasymbool dat de locale van de server toevoegde.type_replaced
intervalvarchar(100) met de tekst van PostgreSQLTIME in MariaDB bevat duren tot 838 uur, maar een interval heeft maanden en dagen; de tekst behoudt elk deel.type_replaced
arrays (integer[], text[]...)json-arraysMariaDB heeft geen arrays. Een JSON-array behoudt elk element en NULL, en JSON-functies lezen hem.type_replaced
ranges, geometric types, tsvector, xml, hstore, composite and extension typeslongtext met de tekst van PostgreSQLMariaDB heeft geen gelijkwaardig type, dus elke waarde behoudt de tekst die PostgreSQL schreef.type_replaced
json, jsonbjsonDezelfde JSON-waarden; de volgorde van sleutels en de spaties van jsonb zijn die van de server.
timestampdatetime(p)Een timestamp zonder tijdzone is een kloktijd, net als datetime.
timestamp with time zonedatetime(p) in UTCTIMESTAMP in MariaDB reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset de dump ook schreef.moments_as_utc
timetime(p)TIME in MariaDB bevat elk tijdstip van de dag, 24:00:00 inbegrepen.
infinity, -infinity, BC dates and years past 9999NULLMariaDB slaat jaren 1000 tot en met 9999 op, zonder oneindig. Die waarden worden NULL en het rapport telt ze.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLGetallen in MariaDB kennen geen NaN of Infinity, 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 typesenum(...) met dezelfde labelsENUM in MariaDB behoudt de labels in hun volgorde.
uuid, inet, cidruuid als uuid, inet en cidr als varchar(43)MariaDB heeft een uuid-type; adressen behouden hun tekst, inclusief masker.
byteablob, mediumblob of longblob; varbinary(3072) in een sleutelBytes blijven bytes.
bit(n)bit(n) tot 64, daarboven textEen bitstring tot 64 bits is het getal dat zijn bits vormen; een langere behoudt zijn cijfers.
citext and nondeterministic collationsexacte vergelijkingTabellen gebruiken utf8mb4_bin, zodat tekst exact wordt vergeleken, zoals in PostgreSQL; kolommen die in de bron hoofdletters negeerden, verliezen dat.case_insensitive_collation
serial, identityAUTO_INCREMENT, verdergaand na het hoogste idDe kolom vooraan in de primaire sleutel telt; de teller gaat verder waar de sequence was.
a second serial or identity column in a tablegeheel getalMariaDB telt één kolom per tabel; elke andere behoudt zijn waarden zonder teller.counter_dropped
sequences not owned by a columnCREATE SEQUENCE, op de waarde die hij als volgende uitgeeftSequences in MariaDB werken op dezelfde manier.
generated columnsgegenereerde kolommen, STORED zoals in de bronMariaDB berekent ze op dezelfde manier.
generated columns with functions MariaDB lackseen gewone kolomEen formule die niet voor MariaDB kan worden geschreven, levert een gewone kolom en een regel in het rapport op.generated_not_translated
defaults with functions MariaDB lacks, and defaults from a sequencegeen standaardwaardeEen standaardwaarde die niet voor MariaDB kan worden geschreven, wordt weggelaten en gemeld.default_not_translated
CHECK constraintsvertaald, inline in CREATE TABLEMySQL 8.0.16 en MariaDB dwingen ze af; MySQL 5.7 bewaart ze zonder te controleren.
CHECK constraints with functions MariaDB lacksniet aangemaaktEen check die niet voor MariaDB kan worden geschreven, wordt weggelaten en gemeld.check_skipped
CHECK ... NOT VALIDniet aangemaaktPostgreSQL heeft de rijen die er al waren nooit gecontroleerd, dus ze kunnen hem schenden.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexesniet aangemaaktMariaDB heeft alleen b-tree-, full-text- en ruimtelijke indexen, op hele kolommen, zonder WHERE.index_skipped
foreign keysrefererende sleutels, geladen met FOREIGN_KEY_CHECKS=0De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen.
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; partitioneer de tabel opnieuw in MariaDB als dat nodig is.partitions_dropped
schemaséén database, tabellen met de naam van hun schema ervoorSchema's in MariaDB zijn databases, die een script dat in één database laadt niet kan aanmaken; 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 knowlongtextTekst 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 moet geldige utf8mb4 zijn.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 MariaDB 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.

mariadb --default-character-set=utf8mb4 mydb < postgresql.mariadb.sql

Refererende sleutels worden aangemaakt zoals de dump ze declareert, met FOREIGN_KEY_CHECKS=0 terwijl de rijen laden, zoals mysqldump doet.

Voer bij een grote dump de client uit op dezelfde machine als de server, en verhoog max_allowed_packet als één rij erg groot is.

IntoSQL Pro laadt het bestand rechtstreeks in MariaDB vanuit de desktopapp of de opdrachtregel, zonder een script te schrijven.

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 MariaDB.

Vragen over PostgreSQL naar MariaDB

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?

Ja, voor één kolom per tabel: de serial- of identity-kolom vooraan in de primaire sleutel wordt AUTO_INCREMENT en gaat verder na het hoogste id. Sequences die niet bij een kolom horen, worden MariaDB-sequences op de waarde die ze hadden bereikt.

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

Arrays worden JSON-arrays, booleans tinyint(1), enums ENUM met dezelfde labels, uuid UUID en money een decimal. Ranges, geometrische typen, hstore en samengestelde typen behouden de tekst van PostgreSQL, en het rapport zegt welke kolommen.

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 MariaDB-versies laadt het script?

MariaDB 10.11 en later. Elke testdump laadt op 10.11 en 11.4 en stopt bij de eerste fout als er iets misgaat.