Zum Inhalt springen
IntoSQL-Startseite

Oracle in PostgreSQL umwandeln

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.

Deine Datei
sqlshop_2024_oracle.sqlBeispieldatei, 9,3 kB
Deine Datenbank

18 Zeilen konvertiert, keine Korrekturen, keine abgelehnt

Anzeigen

Tabellen in shop_2024_oracle.sqlOracle-Dump · erstellt mit SQL Developer · utf-8

  • customers8 Zeilen
    7 Spalten
    idbigint not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countryvarchar(2) not null
    is_activesmallint not null
    signed_uptimestamp(0)
    created_attimestamp(0) not null
  • orders10 Zeilen
    9 Spalten
    idbigint not null
    customer_idbigint not null
    invoicebigint
    statusvarchar(10) not null
    totalnumeric(10,2) not null
    itemsinteger not null
    ordered_attimestamp(0) not null
    shipped_attimestamp(0)
    notevarchar(255)
-- Written by IntoSQL from a Oracle dump. Load it with: psql -v ON_ERROR_STOP=1 -f <file>
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET synchronous_commit = off;
SET maintenance_work_mem = '512MB';

CREATE SEQUENCE invoice_numbers INCREMENT BY 1 MINVALUE 1 START WITH 1020;
CREATE TABLE customers (
    id bigint GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    name varchar(100) NOT NULL,
    email varchar(150) NOT NULL,
    country varchar(2) DEFAULT 'US' NOT NULL,
    is_active smallint DEFAULT 1 NOT NULL,
    signed_up timestamp(0),
    created_at timestamp(0) DEFAULT LOCALTIMESTAMP NOT NULL,
    CONSTRAINT customers_check1 CHECK (is_active IN (0, 1))
);

CREATE TABLE orders (
    id bigint GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    customer_id bigint NOT NULL,
    invoice bigint DEFAULT (nextval('invoice_numbers')),
    status varchar(10) DEFAULT 'pending' NOT NULL,
    total numeric(10,2) NOT NULL,
    items integer DEFAULT 1 NOT NULL,
    ordered_at timestamp(0) NOT NULL,
    shipped_at timestamp(0),
    note varchar(255),
    CONSTRAINT orders_check1 CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled'))
);

COPY customers (id, name, email, country, is_active, signed_up, created_at) FROM stdin;
1	Ana Martínez	ana@example.com	MX	1	2023-01-15 00:00:00	2023-01-15 10:24:00.000000
2	Zoë Müller	zoe@example.de	DE	1	2023-02-03 00:00:00	2023-02-03 08:11:42.000000
3	José Peña	jose@example.es	ES	0	2023-03-21 00:00:00	2023-03-21 19:05:17.000000
4	李雷	lilei@example.cn	CN	1	2023-05-09 00:00:00	2023-05-09 02:40:00.000000
5	Noah O'Brien	noah@example.ie	IE	1	\N	2023-06-30 14:00:00.000000
6	Amélie Laurent	amelie@example.fr	FR	1	2024-01-02 00:00:00	2024-01-02 09:30:00.000000
7	Ravi Patel	ravi@example.in	IN	0	2024-02-29 00:00:00	2024-02-29 23:59:59.000000
8	Sofia Rossi 🌻	sofia@example.it	IT	1	2024-04-12 00:00:00	2024-04-12 12:12:12.000000
\.

COPY orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) FROM stdin;
1	1	1000	shipped	129.9	3	2024-03-01 10:00:00	2024-03-02 16:30:00	\N
2	2	1001	paid	54	1	2024-03-02 11:15:00	\N	Gift wrap 🎁
3	1	1002	cancelled	12.5	1	2024-03-03 09:45:00	\N	Customer changed their mind
4	4	1003	shipped	980	12	2024-03-05 02:10:00	2024-03-07 08:00:00	请小心轻放
5	5	1004	pending	45.75	2	2024-03-08 17:20:00	\N	Leave at the door; ring twice
6	6	1005	shipped	310.4	5	2024-03-10 13:00:00	2024-03-11 09:00:00	Fragile: "glass"
7	8	1006	paid	76.2	2	2024-03-11 18:45:00	\N	\N
8	2	1007	paid	19.99	1	2024-03-12 08:00:00	\N	Paid at the counter
9	3	1008	shipped	64	2	2024-03-14 15:30:00	\N	Shipping date never recorded
10	7	1009	paid	1499	1	2024-03-15 21:05:00	\N	C:\\Users\\ravi\\invoice.pdf
\.


-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX customers_customers_pk ON customers (id);
CREATE UNIQUE INDEX customers_customers_email_uk ON customers (email);
CREATE UNIQUE INDEX orders_orders_pk ON orders (id);
CREATE INDEX orders_orders_status_date_ix ON orders (status, ordered_at);
ALTER TABLE customers ADD CONSTRAINT customers_customers_pk PRIMARY KEY USING INDEX customers_customers_pk;
ALTER TABLE customers ADD CONSTRAINT customers_customers_email_uk UNIQUE USING INDEX customers_customers_email_uk;
ALTER TABLE orders ADD CONSTRAINT orders_orders_pk PRIMARY KEY USING INDEX orders_orders_pk;
ALTER TABLE orders ADD CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
    ALTER TABLE orders VALIDATE CONSTRAINT orders_customer_fk;
EXCEPTION WHEN foreign_key_violation THEN
    RAISE WARNING 'foreign key % has rows without a parent: it stays NOT VALID, and new rows are checked', 'orders_customer_fk';
END $f$;
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1), 9223372036854775807)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 1), 9223372036854775807)::bigint, false);

Korrekturen

Nichts musste korrigiert werden.

Deine Datei wird auf diesem Computer umgewandelt und nie hochgeladen.

Weitere Beispiele:

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.

  • BOOLEAN (23ai)

    boolean

    TRUE und FALSE bleiben true und false.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    varchar(n) und text

    Längen zählen Zeichen, ob Oracle Bytes oder Zeichen gezählt hat, damit jeder Wert passt.

  • NUMBER, NUMBER(p,s), FLOAT(b)

    numeric(p,s) oder bigint

    NUMBER behält jede Stelle; ein NUMBER ohne Genauigkeit, dessen Werte alle ganze Zahlen mit bis zu 18 Stellen sind, wird eine 64-Bit-Ganzzahl, und eine negative Skalierung fasst entsprechend viele Stellen vor dem Komma.

  • DATE, TIMESTAMP(p)

    timestamp(p)

    DATE in Oracle enthält eine Uhrzeit auf die Sekunde, daher ist es Datum und Uhrzeit. Ein Export in einer amerikanischen oder deutschen Sitzung schreibt Datumswerte ohne Uhrzeit und Jahrhundert (DD-MON-RR); exportiere in einer ISO-Sitzung (SYYYY-MM-DD HH24:MI:SS), um sie zu behalten.

  • TIMESTAMP(7) to TIMESTAMP(9)

    sechs Sekundenstellen, die siebte abgeschnitten

    PostgreSQL behält Mikrosekunden; die siebte Stelle (100 Nanosekunden) wird abgeschnitten, nie gerundet, damit kein Wert in die nächste Sekunde oder den nächsten Tag rutscht.

    Berichtszeile: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    timestamptz, dieselben Zeitpunkte

    timestamptz behält den Zeitpunkt; PostgreSQL zeigt ihn in der Zeitzone der Sitzung statt mit dem Versatz, den jeder Wert hatte.

  • JSON (21c), and CLOB holding JSON

    jsonb

    Dieselben JSON-Werte; ein SQL-NULL, das der Export als 'null' geschrieben hat, bleibt NULL.

  • BLOB, RAW(n), LONG RAW

    bytea

    Bytes bleiben Bytes.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text, und xml für XMLTYPE

    Die eigenen Typen von Oracle haben keine Entsprechung; ihre Werte behalten ihren Text, ROWID-Werte eingeschlossen, auch wenn sie außerhalb von Oracle nichts bedeuten.

    Berichtszeile: type_replaced

  • collations that ignore case (BINARY_CI)

    exakter Vergleich

    PostgreSQL vergleicht Text exakt, daher unterscheiden Spalten, die in Oracle die Groß-/Kleinschreibung ignorierten, jetzt Ana und ana.

    Berichtszeile: case_insensitive_collation

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    GENERATED BY DEFAULT AS IDENTITY, weiter nach der höchsten ID

    Die kopierten IDs laden unverändert, und der Zähler macht nach der höchsten weiter. Eine Spalte, die ein Trigger aus einer Sequenz füllt (der Weg vor 12c), wird ebenfalls eine Identity-Spalte.

  • CREATE SEQUENCE

    CREATE SEQUENCE mit denselben Optionen

    Der Export schreibt den Stand einer Sequenz als ihr START WITH, daher macht sie dort weiter.

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    generierte Spalten, STORED

    PostgreSQL 13 bis 17 speichern generierte Spalten nur; die Formel ist dieselbe, mit || so geschrieben, dass NULL wie in Oracle als leer zählt.

    Berichtszeile: virtual_as_stored

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    eine normale Spalte

    Eine Formel, die sich nicht für PostgreSQL schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht; die Werte, die der Export für virtuelle Spalten geschrieben hat, werden weggelassen, und PostgreSQL kann sie nicht berechnen.

    Berichtszeile: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    kein Standardwert

    Ein Standardwert, der sich nicht für PostgreSQL schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: default_not_translated

  • CHECK constraints

    übersetzt

    Dieselben CHECK-Bedingungen, geprüft beim Laden jeder Zeile.

  • CHECK constraints with functions IntoSQL doesn't write

    nicht angelegt

    Eine CHECK-Bedingung, die sich nicht für PostgreSQL schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    nicht angelegt

    Oracle wendet diese CHECK-Bedingungen nicht auf die bereits vorhandenen Zeilen an, daher können die Zeilen sie verletzen.

    Berichtszeile: check_not_enforced

  • function-based, bitmap and domain indexes

    nicht angelegt

    IntoSQL schreibt B-Tree-Indizes auf Spalten; lege die anderen nach dem Laden neu an.

    Berichtszeile: index_skipped

  • foreign keys

    Fremdschlüssel, nach den Zeilen

    Die Zeilen laden in beliebiger Reihenfolge, und die Schlüssel prüfen sie danach.

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    nicht angelegt

    Ein Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt, und einer, den Oracle nicht prüft, kann Zeilen ohne Elternzeile haben.

    Berichtszeile: foreign_key_skipped

  • partitioned tables

    eine Tabelle mit den Zeilen aller Partitionen

    Die Zeilen bleiben dieselben; partitioniere die Tabelle in PostgreSQL neu, wenn nötig.

    Berichtszeile: partitions_dropped

  • 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

  • views, synonyms, types, packages, procedures, functions and other triggers

    im Bericht aufgeführt

    Ihr Code ist in PL/SQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst.

    Berichtszeile: not_converted_objects

  • exports without CREATE TABLE (data only)

    Typen aus den Werten gelesen

    Ein Export nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten.

    Berichtszeile: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Ein Konverter, der keine Datenbank ausführt, kann sie nicht auswerten; to_date, to_timestamp, TO_CLOB, HEXTORAW und die anderen, die Exporte schreiben, werden gelesen.

    Berichtszeile: expression_value

  • types IntoSQL doesn't know, and object types

    text

    Text nimmt jeden Wert auf; ändere den Typ nach dem Laden.

    Berichtszeile: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    Ein Wert, der kein Datum ist, wird NULL, und der Bericht zählt ihn.

    Berichtszeile: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NaN und Infinity bleiben erhalten

    Gleitkommatypen in PostgreSQL können NaN und Unendlich speichern.

  • NUL characters in text

    entfernt

    Text in PostgreSQL kann kein NUL-Zeichen enthalten. Es wird entfernt, und der Bericht zählt die Werte.

    Berichtszeile: nul_removed

  • text that isn't valid in its encoding

    die fehlerhaften Bytes als Ersatzzeichen

    Text in PostgreSQL muss gültiges UTF-8 sein.

    Berichtszeile: invalid_utf8_replaced

  • text decoded twice (ñ)

    unverändert kopiert

    Das Skript enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.

    Berichtszeile: mojibake_suspected

In OracleIn PostgreSQLBerichtszeile
BOOLEAN (23ai)booleanTRUE und FALSE bleiben true und false.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGvarchar(n) und textLängen zählen Zeichen, ob Oracle Bytes oder Zeichen gezählt hat, damit jeder Wert passt.
NUMBER, NUMBER(p,s), FLOAT(b)numeric(p,s) oder bigintNUMBER behält jede Stelle; ein NUMBER ohne Genauigkeit, dessen Werte alle ganze Zahlen mit bis zu 18 Stellen sind, wird eine 64-Bit-Ganzzahl, und eine negative Skalierung fasst entsprechend viele Stellen vor dem Komma.
DATE, TIMESTAMP(p)timestamp(p)DATE in Oracle enthält eine Uhrzeit auf die Sekunde, daher ist es Datum und Uhrzeit. Ein Export in einer amerikanischen oder deutschen Sitzung schreibt Datumswerte ohne Uhrzeit und Jahrhundert (DD-MON-RR); exportiere in einer ISO-Sitzung (SYYYY-MM-DD HH24:MI:SS), um sie zu behalten.
TIMESTAMP(7) to TIMESTAMP(9)sechs Sekundenstellen, die siebte abgeschnittenPostgreSQL behält Mikrosekunden; die siebte Stelle (100 Nanosekunden) wird abgeschnitten, nie gerundet, damit kein Wert in die nächste Sekunde oder den nächsten Tag rutscht.fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEtimestamptz, dieselben Zeitpunktetimestamptz behält den Zeitpunkt; PostgreSQL zeigt ihn in der Zeitzone der Sitzung statt mit dem Versatz, den jeder Wert hatte.
JSON (21c), and CLOB holding JSONjsonbDieselben JSON-Werte; ein SQL-NULL, das der Export als 'null' geschrieben hat, bleibt NULL.
BLOB, RAW(n), LONG RAWbyteaBytes bleiben Bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtext, und xml für XMLTYPEDie eigenen Typen von Oracle haben keine Entsprechung; ihre Werte behalten ihren Text, ROWID-Werte eingeschlossen, auch wenn sie außerhalb von Oracle nichts bedeuten.type_replaced
collations that ignore case (BINARY_CI)exakter VergleichPostgreSQL vergleicht Text exakt, daher unterscheiden Spalten, die in Oracle die Groß-/Kleinschreibung ignorierten, jetzt Ana und ana.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsGENERATED BY DEFAULT AS IDENTITY, weiter nach der höchsten IDDie kopierten IDs laden unverändert, und der Zähler macht nach der höchsten weiter. Eine Spalte, die ein Trigger aus einer Sequenz füllt (der Weg vor 12c), wird ebenfalls eine Identity-Spalte.
CREATE SEQUENCECREATE SEQUENCE mit denselben OptionenDer Export schreibt den Stand einer Sequenz als ihr START WITH, daher macht sie dort weiter.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)generierte Spalten, STOREDPostgreSQL 13 bis 17 speichern generierte Spalten nur; die Formel ist dieselbe, mit || so geschrieben, dass NULL wie in Oracle als leer zählt.virtual_as_stored
virtual columns with functions IntoSQL doesn't write, and the || operatoreine normale SpalteEine Formel, die sich nicht für PostgreSQL schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht; die Werte, die der Export für virtuelle Spalten geschrieben hat, werden weggelassen, und PostgreSQL kann sie nicht berechnen.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)kein StandardwertEin Standardwert, der sich nicht für PostgreSQL schreiben lässt, wird weggelassen und gemeldet.default_not_translated
CHECK constraintsübersetztDieselben CHECK-Bedingungen, geprüft beim Laden jeder Zeile.
CHECK constraints with functions IntoSQL doesn't writenicht angelegtEine CHECK-Bedingung, die sich nicht für PostgreSQL schreiben lässt, wird weggelassen und gemeldet.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEnicht angelegtOracle wendet diese CHECK-Bedingungen nicht auf die bereits vorhandenen Zeilen an, daher können die Zeilen sie verletzen.check_not_enforced
function-based, bitmap and domain indexesnicht angelegtIntoSQL schreibt B-Tree-Indizes auf Spalten; lege die anderen nach dem Laden neu an.index_skipped
foreign keysFremdschlüssel, nach den ZeilenDie Zeilen laden in beliebiger Reihenfolge, und die Schlüssel prüfen sie danach.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesnicht angelegtEin Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt, und einer, den Oracle nicht prüft, kann Zeilen ohne Elternzeile haben.foreign_key_skipped
partitioned tableseine Tabelle mit den Zeilen aller PartitionenDie Zeilen bleiben dieselben; partitioniere die Tabelle in PostgreSQL neu, wenn nötig.partitions_dropped
NOT NULL columns with values that become NULLNOT NULL entferntEine Spalte, deren Werte NULL werden mussten, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersim Bericht aufgeführtIhr Code ist in PL/SQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst.not_converted_objects
exports without CREATE TABLE (data only)Typen aus den Werten gelesenEin Export nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten.no_schema
expressions in INSERT values other than the ones exports writeNULLEin Konverter, der keine Datenbank ausführt, kann sie nicht auswerten; to_date, to_timestamp, TO_CLOB, HEXTORAW und die anderen, die Exporte schreiben, werden gelesen.expression_value
types IntoSQL doesn't know, and object typestextText nimmt jeden Wert auf; ändere den Typ nach dem Laden.unknown_type
dates before year 1 and time zones given as region namesNULLEin Wert, der kein Datum ist, wird NULL, und der Bericht zählt ihn.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENaN und Infinity bleiben erhaltenGleitkommatypen in PostgreSQL können NaN und Unendlich speichern.
NUL characters in textentferntText in PostgreSQL kann kein NUL-Zeichen enthalten. Es wird entfernt, und der Bericht zählt die Werte.nul_removed
text that isn't valid in its encodingdie fehlerhaften Bytes als ErsatzzeichenText in PostgreSQL muss gültiges UTF-8 sein.invalid_utf8_replaced
text decoded twice (ñ)unverändert kopiertDas Skript enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.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.

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

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.

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.