PostgreSQL in MariaDB umwandeln
Leg einen einfachen Dump aus pg_dump oder pg_dumpall ab, als .sql oder .sql.gz, und lade ein MariaDB-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den MariaDB nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.
18 Zeilen konvertiert, 3 Korrekturen, keine abgelehnt
Tabellen in shop_2024_postgres.sqlPostgreSQL-18.6-Dump · erstellt mit pg_dump · utf8mb4
customers8 Zeilen2
8 Spalten id int not null name text not null email varchar(768) not null country char(2) not null is_active tinyint(1) not null tags json not null signed_up date created_at datetime(6) not null orders10 Zeilen1
10 Spalten id int not null customer_id int not null status enum('pending','paid','shipped','cancelled') not null total decimal(10,2) not null items smallint not null ordered_at datetime(6) not null shipped_at datetime(6) note text details json delivery varchar(100)
Nicht konvertiert
- Sicht paid_orders
Jede Datenbank schreibt diese in ihrer eigenen Sprache. Schreib sie für MariaDB neu.
-- 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;
Korrekturen
- "created_at" von customers enthält Zeitpunkte mit Zeitzone; MariaDB hat keinen Typ, der eine behält, daher werden sie in UTC als datetime(6) gespeichert.
- "tags" von customers ist text[], was MariaDB nicht hat, daher ist sie json mit denselben Werten.
- "delivery" von orders ist interval, was MariaDB nicht hat, daher ist sie varchar(100) mit denselben Werten.
Zu prüfen
- 1 Sicht, Trigger, Routine oder Ereignis wird nicht konvertiert; der Bericht listet sie einzeln auf. Lege sie in MariaDB von Hand neu an.
- Der Standardwert von "tags" in customers lässt sich nicht für MariaDB schreiben (a value its type can't hold), daher hat die Spalte keinen Standardwert. Füge den Standardwert von Hand hinzu, wenn neue Zeilen ihn brauchen.
- Der Index idx_orders_details auf orders nutzt einen Ausdruck, der sich nicht für MariaDB schreiben lässt (neither MySQL 5.7 nor MariaDB index an expression), daher wird er nicht angelegt. Lege den Index von Hand an, wenn Abfragen ihn brauchen.
- 1 Wert in "shipped_at" von orders ist ein Datum, das MariaDB nicht speichern kann, etwa infinity, daher ist er NULL. MariaDB speichert die Jahre 1 bis 9999, ohne Unendlich; ersetze diese Datumsangaben in der Quelle, wenn sie wichtig sind.
Deine Datei wird auf diesem Computer umgewandelt und nie hochgeladen.
Weitere Beispiele:
Was sich von PostgreSQL zu MariaDB ändert
Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.
boolean
tinyint(1)
BOOLEAN in MariaDB ist TINYINT(1): true ist 1 und false ist 0.
varchar(n), char(n), text
varchar(n) bis 1024 Zeichen, char(n) bis 255, darüber text
Text behält jedes Zeichen als utf8mb4. Eine Spalte in einem Schlüssel ist höchstens varchar(768), das Längste, was ein Schlüssel fasst.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds
varchar
decimal in MariaDB fasst 65 Stellen mit 30 Nachkommastellen. Breitere Zahlen bleiben Text, damit jede Stelle exakt bleibt; numeric ohne Genauigkeit wird decimal(65,30), wenn seine Werte passen.
Berichtszeile: decimal_as_text
money
decimal(19,2)
MariaDB hat keinen money-Typ. Der Betrag bleibt eine Zahl, ohne das Währungssymbol, das die Locale des Servers hinzugefügt hat.
Berichtszeile: type_replaced
interval
varchar(100) mit dem Text von PostgreSQL
TIME in MariaDB fasst Dauern bis 838 Stunden, aber ein interval hat Monate und Tage; sein Text behält jeden Teil.
Berichtszeile: type_replaced
arrays (integer[], text[]...)
JSON-Arrays
MariaDB hat keine Arrays. Ein JSON-Array behält jedes Element und NULL, und JSON-Funktionen lesen es.
Berichtszeile: type_replaced
ranges, geometric types, tsvector, xml, hstore, composite and extension types
longtext mit dem Text von PostgreSQL
MariaDB hat keinen entsprechenden Typ, daher behält jeder Wert den Text, den PostgreSQL geschrieben hat.
Berichtszeile: type_replaced
json, jsonb
json
Dieselben JSON-Werte; Schlüsselreihenfolge und Leerzeichen von jsonb sind die des Servers.
timestamp
datetime(p)
Ein timestamp without time zone ist eine Uhrzeitangabe ohne Zeitzone, wie datetime.
timestamp with time zone
datetime(p) in UTC
TIMESTAMP in MariaDB reicht nur bis 2038, daher werden Zeitpunkte als datetime in UTC gespeichert: derselbe Zeitpunkt, welchen Versatz der Dump auch geschrieben hat.
Berichtszeile: moments_as_utc
time
time(p)
TIME in MariaDB fasst jede Uhrzeit, einschließlich 24:00:00.
infinity, -infinity, BC dates and years past 9999
NULL
MariaDB speichert die Jahre 1000 bis 9999, ohne Unendlich. Diese Werte werden NULL, und der Bericht zählt sie.
Berichtszeile: date_out_of_range
NaN and Infinity in numeric, real and double precision
NULL
Zahlen in MariaDB kennen weder NaN noch Infinity, daher werden diese Werte NULL, und der Bericht zählt sie.
Berichtszeile: invalid_value_null
NOT NULL columns with values that become NULL
NOT NULL entfernt
Eine Spalte, deren Werte NULL werden mussten, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.
Berichtszeile: not_null_relaxed
enum types
enum(...) mit denselben Labels
ENUM in MariaDB behält die Labels in ihrer Reihenfolge.
uuid, inet, cidr
uuid als uuid, inet und cidr als varchar(43)
MariaDB hat einen uuid-Typ; Adressen behalten ihren Text, einschließlich Maske.
bytea
blob, mediumblob oder longblob; varbinary(3072) in einem Schlüssel
Bytes bleiben Bytes.
bit(n)
bit(n) bis 64, darüber Text
Ein Bitstring bis 64 Bit ist die Zahl, die seine Bits ergeben; ein längerer behält seine Ziffern.
citext and nondeterministic collations
exakter Vergleich
Tabellen nutzen utf8mb4_bin, damit Text exakt verglichen wird wie in PostgreSQL; Spalten, die in der Quelle die Groß-/Kleinschreibung ignorierten, verlieren das.
Berichtszeile: case_insensitive_collation
serial, identity
AUTO_INCREMENT, weiter nach der höchsten ID
Die Spalte am Anfang des Primärschlüssels zählt; der Zähler macht dort weiter, wo die Sequenz stand.
a second serial or identity column in a table
normale Ganzzahl
MariaDB zählt eine Spalte pro Tabelle; jede andere behält ihre Werte ohne Zähler.
Berichtszeile: counter_dropped
sequences not owned by a column
CREATE SEQUENCE, beim Wert, den sie als Nächstes vergibt
Sequenzen in MariaDB funktionieren genauso.
generated columns
generierte Spalten, STORED wie in der Quelle
MariaDB berechnet sie auf dieselbe Weise.
generated columns with functions MariaDB lacks
eine normale Spalte
Eine Formel, die sich nicht für MariaDB schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht.
Berichtszeile: generated_not_translated
defaults with functions MariaDB lacks, and defaults from a sequence
kein Standardwert
Ein Standardwert, der sich nicht für MariaDB schreiben lässt, wird weggelassen und gemeldet.
Berichtszeile: default_not_translated
CHECK constraints
übersetzt, inline in CREATE TABLE
MySQL 8.0.16 und MariaDB wenden sie an; MySQL 5.7 behält sie, ohne sie zu prüfen.
CHECK constraints with functions MariaDB lacks
nicht angelegt
Eine CHECK-Bedingung, die sich nicht für MariaDB schreiben lässt, wird weggelassen und gemeldet.
Berichtszeile: check_skipped
CHECK ... NOT VALID
nicht angelegt
PostgreSQL hat die vorher vorhandenen Zeilen nie geprüft, daher können sie die CHECK-Bedingung verletzen.
Berichtszeile: check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes
nicht angelegt
MariaDB hat nur B-Tree-, Volltext- und räumliche Indizes, auf ganzen Spalten, ohne WHERE.
Berichtszeile: index_skipped
foreign keys
Fremdschlüssel, geladen mit FOREIGN_KEY_CHECKS=0
Die Zeilen laden in beliebiger Reihenfolge, und die Schlüssel prüfen danach neue Zeilen.
foreign keys to tables the dump doesn't create
nicht angelegt
Ein Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt.
Berichtszeile: foreign_key_skipped
partitioned tables
eine Tabelle mit den Zeilen aller Partitionen
Die Zeilen sind dieselben; partitioniere die Tabelle in MariaDB neu, wenn nötig.
Berichtszeile: partitions_dropped
schemas
eine Datenbank, jede Tabelle mit dem Namen ihres Schemas vorangestellt
Schemas sind in MariaDB Datenbanken, die ein in eine Datenbank geladenes Skript nicht anlegen kann; Tabellen in public behalten ihre Namen.
Berichtszeile: schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and types
im Bericht aufgeführt
Ihr Code ist in der Sprache von PostgreSQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst.
Berichtszeile: not_converted_objects
dumps without CREATE TABLE (--data-only)
Typen aus den Werten gelesen
Ein Dump nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten.
Berichtszeile: no_schema
expressions in INSERT values
NULL
Ein Konverter, der keine Datenbank ausführt, kann sie nicht auswerten.
Berichtszeile: expression_value
types IntoSQL doesn't know
longtext
Text nimmt jeden Wert auf; ändere den Typ nach dem Laden.
Berichtszeile: unknown_type
text that isn't valid in its encoding
die fehlerhaften Bytes als Ersatzzeichen
Text muss gültiges utf8mb4 sein.
Berichtszeile: invalid_utf8_replaced
text decoded twice (ñ)
unverändert kopiert
Der Dump enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.
Berichtszeile: mojibake_suspected
| In PostgreSQL | In MariaDB | Berichtszeile |
|---|---|---|
| boolean | tinyint(1)BOOLEAN in MariaDB ist TINYINT(1): true ist 1 und false ist 0. | |
| varchar(n), char(n), text | varchar(n) bis 1024 Zeichen, char(n) bis 255, darüber textText behält jedes Zeichen als utf8mb4. Eine Spalte in einem Schlüssel ist höchstens varchar(768), das Längste, was ein Schlüssel fasst. | |
| numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds | varchardecimal in MariaDB fasst 65 Stellen mit 30 Nachkommastellen. Breitere Zahlen bleiben Text, damit jede Stelle exakt bleibt; numeric ohne Genauigkeit wird decimal(65,30), wenn seine Werte passen. | decimal_as_text |
| money | decimal(19,2)MariaDB hat keinen money-Typ. Der Betrag bleibt eine Zahl, ohne das Währungssymbol, das die Locale des Servers hinzugefügt hat. | type_replaced |
| interval | varchar(100) mit dem Text von PostgreSQLTIME in MariaDB fasst Dauern bis 838 Stunden, aber ein interval hat Monate und Tage; sein Text behält jeden Teil. | type_replaced |
| arrays (integer[], text[]...) | JSON-ArraysMariaDB hat keine Arrays. Ein JSON-Array behält jedes Element und NULL, und JSON-Funktionen lesen es. | type_replaced |
| ranges, geometric types, tsvector, xml, hstore, composite and extension types | longtext mit dem Text von PostgreSQLMariaDB hat keinen entsprechenden Typ, daher behält jeder Wert den Text, den PostgreSQL geschrieben hat. | type_replaced |
| json, jsonb | jsonDieselben JSON-Werte; Schlüsselreihenfolge und Leerzeichen von jsonb sind die des Servers. | |
| timestamp | datetime(p)Ein timestamp without time zone ist eine Uhrzeitangabe ohne Zeitzone, wie datetime. | |
| timestamp with time zone | datetime(p) in UTCTIMESTAMP in MariaDB reicht nur bis 2038, daher werden Zeitpunkte als datetime in UTC gespeichert: derselbe Zeitpunkt, welchen Versatz der Dump auch geschrieben hat. | moments_as_utc |
| time | time(p)TIME in MariaDB fasst jede Uhrzeit, einschließlich 24:00:00. | |
| infinity, -infinity, BC dates and years past 9999 | NULLMariaDB speichert die Jahre 1000 bis 9999, ohne Unendlich. Diese Werte werden NULL, und der Bericht zählt sie. | date_out_of_range |
| NaN and Infinity in numeric, real and double precision | NULLZahlen in MariaDB kennen weder NaN noch Infinity, daher werden diese Werte NULL, und der Bericht zählt sie. | invalid_value_null |
| NOT NULL columns with values that become NULL | NOT NULL entferntEine Spalte, deren Werte NULL werden mussten, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen. | not_null_relaxed |
| enum types | enum(...) mit denselben LabelsENUM in MariaDB behält die Labels in ihrer Reihenfolge. | |
| uuid, inet, cidr | uuid als uuid, inet und cidr als varchar(43)MariaDB hat einen uuid-Typ; Adressen behalten ihren Text, einschließlich Maske. | |
| bytea | blob, mediumblob oder longblob; varbinary(3072) in einem SchlüsselBytes bleiben Bytes. | |
| bit(n) | bit(n) bis 64, darüber TextEin Bitstring bis 64 Bit ist die Zahl, die seine Bits ergeben; ein längerer behält seine Ziffern. | |
| citext and nondeterministic collations | exakter VergleichTabellen nutzen utf8mb4_bin, damit Text exakt verglichen wird wie in PostgreSQL; Spalten, die in der Quelle die Groß-/Kleinschreibung ignorierten, verlieren das. | case_insensitive_collation |
| serial, identity | AUTO_INCREMENT, weiter nach der höchsten IDDie Spalte am Anfang des Primärschlüssels zählt; der Zähler macht dort weiter, wo die Sequenz stand. | |
| a second serial or identity column in a table | normale GanzzahlMariaDB zählt eine Spalte pro Tabelle; jede andere behält ihre Werte ohne Zähler. | counter_dropped |
| sequences not owned by a column | CREATE SEQUENCE, beim Wert, den sie als Nächstes vergibtSequenzen in MariaDB funktionieren genauso. | |
| generated columns | generierte Spalten, STORED wie in der QuelleMariaDB berechnet sie auf dieselbe Weise. | |
| generated columns with functions MariaDB lacks | eine normale SpalteEine Formel, die sich nicht für MariaDB schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht. | generated_not_translated |
| defaults with functions MariaDB lacks, and defaults from a sequence | kein StandardwertEin Standardwert, der sich nicht für MariaDB schreiben lässt, wird weggelassen und gemeldet. | default_not_translated |
| CHECK constraints | übersetzt, inline in CREATE TABLEMySQL 8.0.16 und MariaDB wenden sie an; MySQL 5.7 behält sie, ohne sie zu prüfen. | |
| CHECK constraints with functions MariaDB lacks | nicht angelegtEine CHECK-Bedingung, die sich nicht für MariaDB schreiben lässt, wird weggelassen und gemeldet. | check_skipped |
| CHECK ... NOT VALID | nicht angelegtPostgreSQL hat die vorher vorhandenen Zeilen nie geprüft, daher können sie die CHECK-Bedingung verletzen. | check_not_valid |
| gin, gist, brin and hash indexes, partial and expression indexes | nicht angelegtMariaDB hat nur B-Tree-, Volltext- und räumliche Indizes, auf ganzen Spalten, ohne WHERE. | index_skipped |
| foreign keys | Fremdschlüssel, geladen mit FOREIGN_KEY_CHECKS=0Die Zeilen laden in beliebiger Reihenfolge, und die Schlüssel prüfen danach neue Zeilen. | |
| foreign keys to tables the dump doesn't create | nicht angelegtEin Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt. | foreign_key_skipped |
| partitioned tables | eine Tabelle mit den Zeilen aller PartitionenDie Zeilen sind dieselben; partitioniere die Tabelle in MariaDB neu, wenn nötig. | partitions_dropped |
| schemas | eine Datenbank, jede Tabelle mit dem Namen ihres Schemas vorangestelltSchemas sind in MariaDB Datenbanken, die ein in eine Datenbank geladenes Skript nicht anlegen kann; Tabellen in public behalten ihre Namen. | schemas_merged |
| views, functions, procedures, triggers, rules, policies, extensions and types | im Bericht aufgeführtIhr Code ist in der Sprache von PostgreSQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | Typen aus den Werten gelesenEin Dump nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten. | no_schema |
| expressions in INSERT values | NULLEin Konverter, der keine Datenbank ausführt, kann sie nicht auswerten. | expression_value |
| types IntoSQL doesn't know | longtextText nimmt jeden Wert auf; ändere den Typ nach dem Laden. | unknown_type |
| text that isn't valid in its encoding | die fehlerhaften Bytes als ErsatzzeichenText muss gültiges utf8mb4 sein. | invalid_utf8_replaced |
| text decoded twice (ñ) | unverändert kopiertDer Dump enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin. | mojibake_suspected |
Das Skript in MariaDB laden
Das Skript legt die Tabellen an, kopiert die Zeilen und fügt dann Schlüssel, Indizes und Fremdschlüssel hinzu, so lädt es schnell und hält beim ersten Fehler an.
mariadb --default-character-set=utf8mb4 mydb < postgresql.mariadb.sqlFremdschlüssel werden so angelegt, wie der Dump sie deklariert, mit FOREIGN_KEY_CHECKS=0, während die Zeilen laden, wie bei mysqldump.
Führe bei einem großen Dump den Client auf dem Rechner des Servers aus und erhöhe max_allowed_packet, wenn eine einzelne Zeile sehr groß ist.
IntoSQL Pro lädt die Datei aus der Desktop-App oder der Kommandozeile direkt in MariaDB, ohne ein Skript zu schreiben.
Den PostgreSQL-Dump für das beste Ergebnis erstellen
Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:
- --format=plain, die Standardeinstellung von pg_dump, schreibt SQL. Ein custom- oder directory-Archiv (-Fc, -Fd) wird mit pg_restore -f dump.sql zu SQL, ohne Datenbankserver.
- --no-owner --no-privileges lassen Rollen und Rechte weg, die der Konverter ohnehin überspringt, daher wird der Dump kleiner.
- pg_dumpall schreibt jede Datenbank in eine Datei; die Tabellen jeder Datenbank werden nach ihr benannt, damit nichts kollidiert.
Was nicht konvertiert wird
Sichten, materialisierte Sichten, Funktionen, Prozeduren, Trigger, Regeln, Zeilensicherheitsrichtlinien, Erweiterungen und Typen sind in der eigenen Sprache von PostgreSQL geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für MariaDB neu schreiben kannst.
Fragen zu PostgreSQL zu MariaDB
Keine Antwort gefunden? Schreib uns über die Kontaktseite, und ein Mensch antwortet. Kontaktseite
Wird mein Dump hochgeladen?
Nein. Der Konverter läuft in deinem Browser und liest den Dump stückweise von deiner Festplatte, daher verlässt er nie deinen Computer. Die Desktop-App und die Kommandozeile konvertieren ebenfalls auf deinem Computer.
Wie groß darf der Dump sein?
Der Konverter hält nie den ganzen Dump im Speicher: Er liest die Datei zweimal, in Abschnitten, und schreibt das Skript fortlaufend. Dumps von mehreren Gigabyte werden im Browser, in der Desktop-App und mit der Kommandozeile konvertiert.
Liest es pg_dump -Fc-Archive?
Nicht direkt: Ein custom-Archiv ist ein Binärformat. pg_restore -f dump.sql dump.backup wandelt es in das einfache SQL um, das der Konverter liest, ohne Verbindung zu einem Server. Der Konverter sagt das, wenn er ein Archiv bekommt.
Aus welchen PostgreSQL-Versionen kann der Dump stammen?
Dumps aus pg_dump und pg_dumpall ab PostgreSQL 10, mit COPY- oder INSERT-Zeilen. Jeder Test-Dump stammt aus PostgreSQL 13 und 18 und wird Zelle für Zelle mit seiner Quelle verglichen.
Bleiben serial- und Identity-Werte erhalten?
Ja, für eine Spalte pro Tabelle: Die serial- oder Identity-Spalte am Anfang des Primärschlüssels wird AUTO_INCREMENT und macht nach der höchsten ID weiter. Sequenzen, die keiner Spalte gehören, werden MariaDB-Sequenzen bei dem Wert, den sie erreicht hatten.
Was passiert mit Arrays, enums und anderen PostgreSQL-Typen?
Arrays werden JSON-Arrays, Booleans tinyint(1), enums ENUM mit denselben Labels, uuid UUID und money ein decimal. Ranges, geometrische Typen, hstore und zusammengesetzte Typen behalten den Text von PostgreSQL, und der Bericht nennt die Spalten.
Was ist mit Funktionen, Triggern und Sichten?
Sie stehen mit Namen im Bericht und werden nicht konvertiert, weil jede Datenbank sie in ihrer eigenen Sprache schreibt.
Auf welchen MariaDB-Versionen lädt das Skript?
MariaDB 10.11 und neuer. Jeder Test-Dump lädt auf 10.11 und 11.4 und hält beim ersten Fehler an, falls etwas schiefgeht.