06. September 2026 · Datenbanken · 11 Min Lesezeit

Oracle nach PostgreSQL: 3 Fragen, die in jedem Migrationsprojekt kommen

Wer eine Oracle-Migration begleitet, hört dieselben 3 Fragen immer wieder. Sie stehen in keinem Migrationsleitfaden, weil sie nicht aus der Theorie kommen, sondern aus der Arbeit: Wie halten wir Datentypen wartbar, warum funktionieren manche Views nicht auf Anhieb und wie beweisen wir am Ende, dass wirklich alles korrekt übernommen wurde?

1. „Machen wir doch einfach alles auf Text"

Diese Idee kommt fast immer, sie hat einen nachvollziehbaren Grund. In Oracle ist eine Längenänderung an einer Spalte lästig. Aus VARCHAR2(50) soll VARCHAR2(80) werden, weil ein Lieferantenname nicht mehr passt. Bei größeren Tabellen bedeutet das Aufwand, Abstimmung und ein Wartungsfenster. Wenn so etwas mehrmals im Monat vorkommt, entsteht daraus eine sehr rationale Schlussfolgerung: Wir nehmen künftig überall den größtmöglichen Texttyp, dann ist Ruhe.

Der Punkt ist nur: Das ist eine Antwort auf ein Oracle-Problem, das PostgreSQL nicht hat.

Was in PostgreSQL anders ist

2 Eigenschaften ändern die Rechnung vollständig:

Damit verschwindet der Schmerz, der die Strategie überhaupt erst erzeugt hat. Die Längenänderung, die unter Oracle ein Wartungsfenster brauchte, ist in PostgreSQL eine Sache von Sekunden.

Was Sie aufgeben, wenn Sie trotzdem alles auf Text setzen

Die Längenbegrenzung ist die billigste Datenprüfung, die es gibt. Sie kostet keine Anwendungslogik, sie greift immer und sie greift auch dann, wenn Daten über einen Importjob oder direkt per SQL hereinkommen statt über die Anwendung. Wer sie pauschal entfernt, verlagert diese Prüfung in den Anwendungscode oder verliert sie ganz.

Die Folgen sind unspektakulär, aber lästig: Ein Nachname mit 4.000 Zeichen aus einem fehlerhaften Import, Formularfelder ohne serverseitige Grenze, Berichte mit zerschossenem Layout. Nichts davon legt ein System lahm, alles davon kostet später Zeit.

Ein Detail, das in der Diskussion oft fehlt: Verkleinern ist weiterhin teuer. Eine Länge nach unten zu setzen erfordert eine Prüfung der vorhandenen Werte. Wer Grenzen also einmal aufgibt, bekommt sie nicht mehr billig zurück.

Die praktikable Antwort liegt in der Mitte. Behalten Sie Längen dort, wo es eine fachliche Grenze gibt, etwa bei Schlüsseln, Kennzeichen und Codes. Nehmen Sie text dort, wo ohnehin keine sinnvolle Obergrenze existiert, etwa bei Beschreibungen und Kommentaren. Die Migration ist der richtige Moment für diese Entscheidung, weil Sie die Spalten ohnehin einzeln anfassen.

2. „74 von 78 Views liefen sofort — warum reden alle über die 4?"

Ein typisches Zwischenergebnis einer Migration: Von 78 Views werden 74 automatisch korrekt übersetzt, 4 brauchen Nacharbeit. Das ist eine Quote von 95 %. Für ein Werkzeug, das SQL zwischen 2 Systemen übersetzt, ist das ein sehr gutes Ergebnis.

In der Wahrnehmung passiert trotzdem etwas anderes. Die 74 funktionierenden Views sieht niemand, weil funktionierende Dinge unsichtbar sind. Die 4 kaputten stehen im Fehlerprotokoll, kosten einen Nachmittag und prägen den Eindruck. Aus „das Werkzeug hat 95 % erledigt" wird im Kopf „das Werkzeug ist unzuverlässig".

Warum es immer ein Rest bleibt

Die Ausfälle sind nicht zufällig verteilt. Sie sammeln sich dort, wo Oracle-spezifisches SQL im Spiel ist: hierarchische Abfragen, proprietäre Funktionen, Besonderheiten bei Datums- und Zeitverarbeitung, verschachtelte Konstrukte, die in PostgreSQL anders formuliert werden. Ein Übersetzer kann Muster abbilden, die er kennt. Was strukturell anders gelöst werden muss, kann er nicht erraten.

Deshalb ist die 95-%-Quote auch kein Zufallswert, sondern erwartbar. Eine Migration, bei der 100 % der Views auf Anhieb laufen, hat entweder sehr einfache Views oder ein Prüfproblem.

Was das für die Projektplanung heißt

Setzen Sie die Nacharbeit von Anfang an in den Plan, statt sie als Störung zu behandeln. 2 Zahlen helfen dabei mehr als jede Diskussion: Wie viele Objekte gibt es und welcher Anteil braucht Handarbeit. Ist das vorher benannt, ist die Nacharbeit ein eingeplanter Posten. Fehlt es, wirkt jeder gefundene Fehler wie ein Rückschlag.

Für die Kommunikation im Projekt ist die Umkehrung nützlich: Nicht „4 Views sind fehlgeschlagen", sondern „74 Views sind ohne Eingriff übernommen, 4 brauchen je etwa eine Stunde". Dieselbe Tatsache, eine völlig andere Wirkung auf ein Lenkungsgremium.

3. „Wie beweisen wir, dass alles korrekt migriert ist?"

Die Frage kommt spät und ist die wichtigste von allen. Die Daten sind übertragen, die Anwendung startet, die Stichproben sehen gut aus. Nur will jemand das schriftlich haben, bevor das alte System abgeschaltet wird.

Der naheliegende Gedanke lautet meist: Wir bilden Prüfsummen über die Tabelleninhalte auf beiden Seiten und vergleichen sie. Das funktioniert tatsächlich, aber der Hash ist der einfache Teil.

Die Werkzeuge gibt es

Oracle bringt seit Version 12.1 die Funktion STANDARD_HASH mit, die direkt in SQL nutzbar ist und unter anderem SHA-256 beherrscht. PostgreSQL hat seit Version 11 eine eingebaute sha256-Funktion. Beide erzeugen denselben Hash, sofern sie dieselben Bytes bekommen.

Dieselben Bytes zu bekommen ist die eigentliche Arbeit

Hier liegen die Fallen, die erste ist die gemeinste:

Machbar ist das alles. Nur ist es ein eigenes kleines Projekt. Wenn die Vereinheitlichung an einer Stelle nicht stimmt, jagen Sie tagelang Abweichungen, die keine sind.

Die Prüfleiter, die ich empfehle

4 Stufen, von billig nach teuer. Die meisten Projekte brauchen die vierte nie:

Der Reflex, sofort mit Hashes zu starten, ist verständlich, weil er nach dem strengsten Beweis klingt. In der Praxis finden die Stufen 1 und 2 den Großteil der Fehler in einem Bruchteil der Zeit.

Vor der Entscheidung, nicht mittendrin

Das Migrations-Assessment klärt vorher, was Ihre Landschaft an Aufwand bedeutet: Objektinventar, Aufwands- und Risikoeinschätzung, Entscheidungspapier. 3 Tage, Festpreis, ergebnisoffen.

→ Migrations-Assessment ansehen

Was die 3 Fragen verbindet

Alle 3 entstehen an derselben Stelle: Ein Team überträgt Erfahrungen aus dem alten System auf das neue, ohne zu prüfen, ob die Voraussetzungen noch gelten. Die Text-Strategie löst ein Oracle-Problem, das PostgreSQL nicht hat. Die Enttäuschung über die 4 Views entsteht aus einer Erwartung, die niemand vorher ausgesprochen hat. Der Wunsch nach Hashes wiederum ist der Reflex, Sicherheit über das aufwendigste verfügbare Mittel herzustellen, statt über das wirksamste.

Das ist kein Vorwurf, sondern die normale Begleiterscheinung eines Systemwechsels. Wer diese 3 Punkte früh anspricht, spart sich die Diskussionen später — meist genau dann, wenn ohnehin wenig Zeit ist.

Wie sich der Aufwand vorher beziffern lässt, steht in Von Oracle zu PostgreSQL: was die Migration wirklich kostet. Wer statt Oracle einen SQL Server ablösen will, findet die Unterschiede in SQL Server nach PostgreSQL.

Häufige Fragen

Sollte man in PostgreSQL text oder varchar verwenden?

Technisch gibt es keinen Unterschied: Beide Typen werden intern identisch gespeichert, es gibt keinen Geschwindigkeitsvorteil. Die Längenangabe bei varchar(n) ist eine kostenlose Datenprüfung. Sinnvoll ist deshalb eine Mischung: Längen dort, wo es eine fachliche Grenze gibt, text dort, wo keine existiert.

Ist eine Längenänderung in PostgreSQL aufwendig?

Das Vergrößern nicht. Seit PostgreSQL 9.2 erfordert das Erhöhen einer varchar-Länge keinen Tabellen-Rewrite und ist damit unabhängig von der Tabellengröße praktisch sofort erledigt. Das Verkleinern erfordert weiterhin eine Prüfung der vorhandenen Werte und ist entsprechend teurer.

Kann man Tabelleninhalte zwischen Oracle und PostgreSQL über Hashes vergleichen?

Ja. Oracle bietet seit Version 12.1 STANDARD_HASH, PostgreSQL seit Version 11 eine eingebaute sha256-Funktion. Der Aufwand liegt nicht im Hashen, sondern darin, auf beiden Seiten exakt dieselben Eingabebytes zu erzeugen: Leerstring gegen NULL, Verkettung mit NULL, Zahlen- und Datumsformate, Auffüllung bei CHAR und die Zeilenreihenfolge müssen ausdrücklich vereinheitlicht werden.

Wie viele Views laufen bei einer Migration typischerweise auf Anhieb?

Eine hohe Quote ist normal, der Rest sammelt sich dort, wo Oracle-spezifisches SQL im Spiel ist: hierarchische Abfragen, proprietäre Funktionen und Besonderheiten der Datumsverarbeitung. Wichtig ist, diese Nacharbeit vorher einzuplanen, statt sie als Fehlschlag des Werkzeugs zu behandeln.

Der ehrliche Schluss

Migrationen scheitern selten an der Technik. Sie scheitern an Erwartungen, die niemand ausgesprochen hat, und an Gewohnheiten, die im alten System richtig waren. Die 3 Fragen oben sind gute Gesprächsanlässe, weil sie früh klären, worüber später sonst gestritten wird.

Tommy Drzewosz
IT- & KI-Architekt, Trainer und Fullstack-Entwickler mit über 20 Jahren Erfahrung im Enterprise-Umfeld, mit Schwerpunkt auf Datenbanken, Schnittstellen und der Logik dazwischen. Dozent für PostgreSQL an der GFU Cyrus AG, Köln, unter anderem für den Kurs zur Migration von Oracle. → Migrations-Assessment zum Festpreis