---
title: "Oracle zu PostgreSQL migrieren, im Browser"
description: "Migriere eine Oracle-Datenbank zu PostgreSQL: Ein Export aus SQL Developer oder SQLcl wird ein Skript mit denselben Tabellen, Schlüsseln und Daten, plus Bericht."
canonical: https://intosql.com/de/oracle-in-postgresql
last_updated: 2026-10-15
---

# Oracle zu PostgreSQL migrieren, im Browser

Leg die .sql-Datei ab, die Database Export in SQL Developer oder SQLcl schreibt, mit ihren Tabellen und Insert-Anweisungen, 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: Oracle zu PostgreSQL migrieren](https://intosql.com/docs/migrations/oracle-to-postgresql)

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

## Was sich von Oracle 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 Oracle | In PostgreSQL | Berichtszeile |
| --- | --- | --- |
| BOOLEAN (23ai) | boolean |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) und text |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | numeric(p,s) oder bigint |  |
| DATE, TIMESTAMP(p) | timestamp(p) |  |
| TIMESTAMP(7) to TIMESTAMP(9) | sechs Sekundenstellen, die siebte abgeschnitten | `fraction_cut` |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | timestamptz, dieselben Zeitpunkte |  |
| JSON (21c), and CLOB holding JSON | jsonb |  |
| BLOB, RAW(n), LONG RAW | bytea |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | text, und xml für XMLTYPE | `type_replaced` |
| collations that ignore case (BINARY_CI) | exakter Vergleich | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT AS IDENTITY, weiter nach der höchsten ID |  |
| CREATE SEQUENCE | CREATE SEQUENCE mit denselben Optionen |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | generierte Spalten, STORED | `virtual_as_stored` |
| virtual columns with functions IntoSQL doesn't write, and the || operator | eine normale Spalte | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | kein Standardwert | `default_not_translated` |
| CHECK constraints | übersetzt |  |
| CHECK constraints with functions IntoSQL doesn't write | nicht angelegt | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | nicht angelegt | `check_not_enforced` |
| function-based, bitmap and domain indexes | nicht angelegt | `index_skipped` |
| foreign keys | Fremdschlüssel, nach den Zeilen |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | nicht angelegt | `foreign_key_skipped` |
| partitioned tables | eine Tabelle mit den Zeilen aller Partitionen | `partitions_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL entfernt | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | im Bericht aufgeführt | `not_converted_objects` |
| exports without CREATE TABLE (data only) | Typen aus den Werten gelesen | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | text | `unknown_type` |
| dates before year 1 and time zones given as region names | NULL | `date_out_of_range` |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NaN und Infinity bleiben erhalten |  |
| NUL characters in text | entfernt | `nul_removed` |
| text that isn't valid in its encoding | die fehlerhaften Bytes als Ersatzzeichen | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | unverändert kopiert | `mojibake_suspected` |

## 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 oracle.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 Oracle-Dump für das beste Ergebnis erstellen

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

- Wähle in SQL Developer Tools, Database Export, mit DDL und dem Datenformat Insert. SQLcl schreibt dasselbe mit SET SQLFORMAT INSERT.
- Führe vor dem Export ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' aus: Das Standardformat schreibt Datumswerte ohne Uhrzeit und Jahrhundert.
- Eine .dmp-Datei aus exp oder expdp ist binär: Importiere sie in eine Oracle-Datenbank, zum Beispiel Oracle Database Free in Docker, und exportiere sie mit SQL Developer.

## Was nicht konvertiert wird

Sichten, Pakete, Prozeduren, Funktionen, Trigger, Typen und Synonyme sind in PL/SQL geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für PostgreSQL neu schreiben kannst.

## Fragen zu Oracle 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.

### Kann ich eine .dmp-Datei aus exp oder expdp konvertieren?

Nicht direkt: Data Pump und das ursprüngliche Export-Werkzeug schreiben ein binäres Format, das nur Oracle liest. Importiere die Datei in eine beliebige Oracle-Datenbank (Oracle Database Free läuft in Docker) und exportiere sie mit Database Export in SQL Developer oder mit SQLcl. Der Konverter weist darauf hin, wenn er eine .dmp-Datei bekommt.

### Aus welchen Oracle-Versionen kann der Export stammen?

Exporte aus SQL Developer und SQLcl, mit den Tabellendefinitionen von DBMS_METADATA, ab Oracle 11g. Jeder Test-Export stammt aus Oracle 21c und 23ai, in amerikanischen, deutschen und ISO-Sitzungen, und wird Zelle für Zelle mit seiner Quelle verglichen.

### Was passiert mit NUMBER, DATE und den anderen Oracle-Typen?

NUMBER wird numeric oder bigint, wenn jeder Wert eine ganze Zahl ist; DATE wird timestamp und behält seine Uhrzeit; CLOB wird text, BLOB und RAW bytea, BINARY_DOUBLE double precision mit NaN und Infinity, und Intervalle interval.

### Bleiben Identity-Spalten und Sequenzen erhalten?

Ja. Identity-Spalten bleiben Identity-Spalten und machen nach der höchsten ID weiter, ebenso eine Spalte, die ein Trigger aus einer Sequenz füllt. Sequenzen machen dort weiter, wo sie laut Export angekommen waren.

### Was ist mit PL/SQL-Paketen, 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 Oracle

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

## Nach PostgreSQL

- [MySQL zu PostgreSQL](https://intosql.com/de/mysql-in-postgresql)
- [MariaDB zu PostgreSQL](https://intosql.com/de/mariadb-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)

## Leitfaden und alle Paare

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