---
title: "MariaDB zu PostgreSQL migrieren, im Browser"
description: "Migriere eine MariaDB-Datenbank zu PostgreSQL: Ihr Dump wird ein Skript mit denselben Tabellen, Schlüsseln, Sequenzen und Daten, plus Bericht über jede Änderung."
canonical: https://intosql.com/de/mariadb-in-postgresql
last_updated: 2026-10-15
---

# MariaDB zu PostgreSQL migrieren, im Browser

Leg einen Dump aus mariadb-dump, mysqldump, phpMyAdmin oder Adminer ab, als .sql oder .sql.gz, und lade ein PostgreSQL-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den PostgreSQL nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.

[Leitfaden: MariaDB zu PostgreSQL migrieren](https://intosql.com/docs/migrations/mariadb-to-postgresql)

[Datentypen von MariaDB zu PostgreSQL](https://intosql.com/docs/types/mariadb-to-postgresql)

## Was sich von MariaDB zu PostgreSQL ändert

Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.

| In MariaDB | In PostgreSQL | Berichtszeile |
| --- | --- | --- |
| TINYINT(1), BOOL | boolean, wenn jeder Wert 0 oder 1 ist, sonst smallint | `bool_kept_numeric` |
| UNSIGNED integers | der nächstgrößere Ganzzahltyp mit einem CHECK gegen negative Werte; BIGINT UNSIGNED wird bigint, wenn jeder Wert passt, sonst numeric(20,0) | `unsigned_widened` |
| ZEROFILL and display widths | entfernt | `zerofill_dropped` |
| FLOAT(M,D) | real oder double precision, ohne die Nachkommastellen | `float_scale_dropped` |
| BIT(1), BIT(n) | boolean, bit(n) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL entfernt | `not_null_relaxed` |
| DEFAULT '0000-00-00' | kein Standardwert | `zero_date_default` |
| TIME | time, wenn jeder Wert innerhalb eines Tages liegt, sonst interval | `time_as_interval` |
| YEAR | smallint mit einem CHECK für den Wertebereich |  |
| CHAR(n) | varchar(n) |  |
| DATETIME | timestamp |  |
| TIMESTAMP | timestamptz in der Zeitzone, die der Dump angibt, UTC, wenn er keine angibt | `timestamp_zone_assumed` |
| ENUM | text mit einem CHECK der erlaubten Werte |  |
| ENUM holding '' (MySQL's error value) | der leere Wert, von der CHECK-Bedingung erlaubt | `enum_invalid_value` |
| ENUM or SET holding values outside its list | kein CHECK | `enum_check_skipped` |
| SET | text[] mit einem CHECK, dass jedes Element in der Liste steht |  |
| JSON | jsonb; json, wenn ein Wert \u0000 enthält | `json_not_jsonb` |
| NUL bytes in text | entfernt | `nul_removed` |
| text that isn't valid in its character set | die fehlerhaften Bytes als Ersatzzeichen | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | unverändert kopiert | `mojibake_suspected` |
| AUTO_INCREMENT | GENERATED BY DEFAULT AS IDENTITY, mit dem Zähler hinter den kopierten IDs |  |
| MyISAM AUTO_INCREMENT on the second column of a key | ein Zähler für die Tabelle | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | ein Trigger mit BEFORE UPDATE | `on_update_trigger` |
| generated columns | STORED | `virtual_as_stored` |
| generated columns with functions PostgreSQL lacks | eine normale Spalte | `generated_not_translated` |
| INVISIBLE columns | normale Spalten | `invisible_column` |
| CHECK constraints | übersetzt, inline in CREATE TABLE |  |
| CHECK constraints with functions PostgreSQL lacks | nicht angelegt | `check_skipped` |
| CHECK ... NOT ENFORCED | nicht angelegt | `check_not_enforced` |
| defaults with functions PostgreSQL lacks | kein Standardwert | `default_not_translated` |
| keys and indexes on a prefix, c(20) | ein Index auf left(c, 20) | `prefix_unique` |
| FULLTEXT indexes | GIN auf to_tsvector('simple', ...) | `fulltext_as_gin` |
| indexes on values over 2,000 bytes | hash | `index_on_wide_values` |
| SPATIAL indexes | ohne PostGIS nicht angelegt | `spatial_index_skipped` |
| functional indexes PostgreSQL can't write | nicht angelegt | `index_skipped` |
| foreign keys | nach den Daten, NOT VALID, dann validiert, mit einer Warnung bei verwaisten Zeilen |  |
| foreign keys to columns without a unique key | nicht angelegt | `foreign_key_skipped` |
| table and column names | kleingeschrieben, wenn das eindeutig bleibt | `identifier_renamed` |
| names over 63 bytes | mit einem Hash gekürzt | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | WKB in bytea | `geometry_as_wkb` |
| INET4, INET6, UUID (MariaDB) | inet, uuid |  |
| BINARY, VARBINARY, BLOB | bytea |  |
| PARTITION BY | eine Tabelle | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | eine Tabelle mit den aktuellen Zeilen | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | eine normale Tabelle | `engine_dropped` |
| views, triggers, procedures, functions and events | im Bericht aufgeführt | `not_converted_objects` |
| dumps without CREATE TABLE | Typen aus den Werten gelesen | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB in bytea | `geometry_inferred` |
| _ci collations | exakter Vergleich | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | konvertiert, mit einer Warnung | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | als Latin-1 (Windows-1252) gelesen | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | als UTF-8 gelesen, mit einer Warnung | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | ausgewertet |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | der Standardwert der Spalte | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | normale Zeilen | `replace_as_insert` |
| types IntoSQL doesn't know | text | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE mit ihrem aktuellen Wert |  |
| VECTOR(n) (MariaDB 11.7+) | jsonb mit den Gleitkommazahlen als Array | `type_replaced` |

## Das Skript in PostgreSQL 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.

```shell
psql -v ON_ERROR_STOP=1 -d mydb -f mariadb.postgresql.sql
```

Fremdschlüssel werden als NOT VALID hinzugefügt und dann validiert. Verweist eine Zeile auf eine Zeile, die es nicht gibt, nennt dir das Skript den betroffenen Fremdschlüssel, statt auf halbem Weg abzubrechen.

Lege bei einem großen Dump zuerst die Datenbank an und führe das Skript mit psql auf dem Rechner aus, auf dem der Server läuft.

IntoSQL Pro lädt die Datei aus der Desktop-App oder der Kommandozeile direkt in PostgreSQL, ohne ein Skript zu schreiben.

## Den MariaDB-Dump für das beste Ergebnis erstellen

Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:

- --default-character-set=utf8mb4 bewahrt Emoji und andere 4-Byte-Zeichen, die ein utf8mb3-Dump verliert, bevor der Konverter ihn sieht.
- --hex-blob schreibt Binärspalten und VECTOR-Werte hexadezimal, was das Kopieren zwischen Systemen übersteht.
- --routines --triggers --events fügen diese Objekte dem Dump hinzu, damit der Bericht sie auflisten kann.

## Was nicht konvertiert wird

Sichten, Trigger, gespeicherte Prozeduren, Funktionen und Ereignisse sind in der eigenen Sprache von MariaDB geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für PostgreSQL neu schreiben kannst.

## Fragen zu MariaDB zu PostgreSQL

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

### Aus welchen MariaDB-Versionen kann der Dump stammen?

Dumps aus mariadb-dump und mysqldump auf MariaDB 10.3 bis 12, mit einem INSERT pro Tabelle oder einem pro Zeile. Jeder Test-Dump stammt aus MariaDB 10.11, 11.4 und 11.8 und wird Zelle für Zelle mit seiner Quelle verglichen.

### Bleiben UUID-, INET6-, JSON- und VECTOR-Spalten erhalten?

UUID wird uuid, INET4 und INET6 inet, JSON jsonb und VECTOR ein jsonb-Array seiner Gleitkommazahlen. Null-Daten werden NULL, und der Bericht zählt sie.

### Bleiben AUTO_INCREMENT-Werte und Sequenzen erhalten?

Ja. Jede AUTO_INCREMENT-Spalte wird eine Identity-Spalte, die nach der höchsten ID weitermacht. Sequenzen werden PostgreSQL-Sequenzen, und Standardwerte, die aus einer Sequenz ziehen, ziehen weiter aus ihr.

### Was ist mit gespeicherten Prozeduren und Triggern?

Sie stehen mit Namen im Bericht und werden nicht konvertiert, weil jede Datenbank sie in ihrer eigenen Sprache schreibt.

### Auf welchen PostgreSQL-Versionen lädt das Skript?

PostgreSQL 13 bis 18. Dasselbe Skript lädt auf jeder davon und hält beim ersten Fehler an, falls etwas schiefgeht.

## Aus MariaDB

- [MariaDB zu MySQL](https://intosql.com/de/mariadb-in-mysql)
- [MariaDB zu MariaDB](https://intosql.com/de/mariadb-in-mariadb)
- [MariaDB zu SQLite](https://intosql.com/de/mariadb-in-sqlite)
- [MariaDB zu SQL Server](https://intosql.com/de/mariadb-in-sql-server)
- [MariaDB zu Oracle](https://intosql.com/de/mariadb-in-oracle)

## Nach PostgreSQL

- [MySQL zu PostgreSQL](https://intosql.com/de/mysql-in-postgresql)
- [PostgreSQL zu PostgreSQL](https://intosql.com/de/postgresql-in-postgresql)
- [SQL Server zu PostgreSQL](https://intosql.com/de/sql-server-in-postgresql)
- [SQLite zu PostgreSQL](https://intosql.com/de/sqlite-in-postgresql)
- [Oracle zu PostgreSQL](https://intosql.com/de/oracle-in-postgresql)

## Leitfaden und alle Paare

- [PostgreSQL zu MariaDB](https://intosql.com/de/postgresql-in-mariadb)
- [Leitfaden: MariaDB zu PostgreSQL migrieren](https://intosql.com/docs/migrations/mariadb-to-postgresql)
- [Datentypen von MariaDB zu PostgreSQL](https://intosql.com/docs/types/mariadb-to-postgresql)
- [Alle Datenbankpaare](https://intosql.com/de/datenbankmigration)
