Naar de inhoud
IntoSQL-startpagina

Oracle omzetten naar PostgreSQL

Zet het .sql-bestand neer dat Database Export van SQL Developer of SQLcl schrijft, met zijn tabellen en Insert-statements, en download een PostgreSQL-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die PostgreSQL niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.

Je bestand
sqlshop_2024_oracle.sqlVoorbeeldbestand, 9,3 kB
Je database

18 rijen geconverteerd, geen correcties, geen afgewezen

Tonen

Tabellen in shop_2024_oracle.sqlOracle-dump · geschreven door SQL Developer · utf-8

  • customers8 rijen
    7 kolommen
    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 rijen
    9 kolommen
    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);

Correcties

Er hoefde niets gecorrigeerd te worden.

Je bestand wordt op deze computer omgezet en nooit geüpload.

Andere voorbeelden:

Wat er verandert van Oracle naar PostgreSQL

Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.

  • BOOLEAN (23ai)

    boolean

    TRUE en FALSE blijven true en false.

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

    varchar(n) en text

    Lengtes tellen tekens, of Oracle nu bytes of tekens telde, zodat elke waarde past.

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

    numeric(p,s) of bigint

    NUMBER behoudt elk cijfer; een NUMBER zonder precisie waarvan alle waarden gehele getallen van hoogstens 18 cijfers zijn, wordt een 64-bits integer, en een negatieve schaal krijgt evenveel cijfers voor de komma.

  • DATE, TIMESTAMP(p)

    timestamp(p)

    DATE in Oracle bevat een tijd tot op de seconde, dus het is een datum met tijd. Een export in een Amerikaanse of Duitse sessie schrijft datums zonder tijd of eeuw (DD-MON-RR); exporteer in een ISO-sessie (SYYYY-MM-DD HH24:MI:SS) om ze te behouden.

  • TIMESTAMP(7) to TIMESTAMP(9)

    zes cijfers van een seconde, het zevende afgekapt

    PostgreSQL bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag.

    Rapportregel: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    timestamptz, dezelfde momenten

    timestamptz behoudt het moment; PostgreSQL toont het in de tijdzone van de sessie in plaats van de offset die elke waarde had.

  • JSON (21c), and CLOB holding JSON

    jsonb

    Dezelfde JSON-waarden; een SQL-NULL die de export als 'null' schreef, blijft NULL.

  • BLOB, RAW(n), LONG RAW

    bytea

    Bytes blijven bytes.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text, en xml voor XMLTYPE

    De eigen typen van Oracle hebben geen equivalent; hun waarden behouden hun tekst, ROWID-waarden inbegrepen, al betekenen die buiten Oracle niets.

    Rapportregel: type_replaced

  • collations that ignore case (BINARY_CI)

    exacte vergelijking

    PostgreSQL vergelijkt tekst exact, dus kolommen die in Oracle hoofdletters negeerden, onderscheiden nu Ana en ana.

    Rapportregel: case_insensitive_collation

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

    GENERATED BY DEFAULT AS IDENTITY, verdergaand na het hoogste id

    De gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste. Een kolom die een trigger vult uit een sequence (de manier van voor 12c) wordt ook een identity-kolom.

  • CREATE SEQUENCE

    CREATE SEQUENCE met dezelfde opties

    De export schrijft hoe ver een sequence is gekomen als zijn START WITH, dus hij gaat daar verder.

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

    gegenereerde kolommen, STORED

    PostgreSQL 13 tot en met 17 slaan gegenereerde kolommen alleen op; de formule is dezelfde, met || zo geschreven dat NULL als leeg telt, zoals in Oracle.

    Rapportregel: virtual_as_stored

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

    een gewone kolom

    Een formule die niet voor PostgreSQL kan worden geschreven, levert een gewone kolom en een regel in het rapport op; de waarden die de export voor virtuele kolommen schreef, worden weggelaten, en PostgreSQL kan ze niet berekenen.

    Rapportregel: generated_not_translated

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

    geen standaardwaarde

    Een standaardwaarde die niet voor PostgreSQL kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: default_not_translated

  • CHECK constraints

    vertaald

    Dezelfde checks, getest terwijl elke rij laadt.

  • CHECK constraints with functions IntoSQL doesn't write

    niet aangemaakt

    Een check die niet voor PostgreSQL kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    niet aangemaakt

    Oracle past deze checks niet toe op de rijen die er al zijn, dus de rijen kunnen ze schenden.

    Rapportregel: check_not_enforced

  • function-based, bitmap and domain indexes

    niet aangemaakt

    IntoSQL schrijft b-tree-indexen op kolommen; maak de andere na het laden opnieuw aan.

    Rapportregel: index_skipped

  • foreign keys

    refererende sleutels, na de rijen

    De rijen laden in willekeurige volgorde, en de sleutels controleren ze daarna.

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

    niet aangemaakt

    Een sleutel kan niet verwijzen naar een tabel die er niet is, en een sleutel die Oracle niet controleert, kan rijen zonder ouder hebben.

    Rapportregel: foreign_key_skipped

  • partitioned tables

    één tabel met de rijen van elke partitie

    De rijen zijn dezelfde; partitioneer de tabel opnieuw in PostgreSQL als dat nodig is.

    Rapportregel: partitions_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL weggelaten

    Een kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.

    Rapportregel: not_null_relaxed

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

    vermeld in het rapport

    Hun code is geschreven in PL/SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.

    Rapportregel: not_converted_objects

  • exports without CREATE TABLE (data only)

    typen afgeleid uit de waarden

    Een export met alleen data bevat alleen rijen, dus de typen komen uit de waarden.

    Rapportregel: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Een converter die geen database draait, kan ze niet evalueren; to_date, to_timestamp, TO_CLOB, HEXTORAW en de andere die exports schrijven, worden gelezen.

    Rapportregel: expression_value

  • types IntoSQL doesn't know, and object types

    text

    Text kan elke waarde bevatten; wijzig het type na het laden.

    Rapportregel: unknown_type

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

    NULL

    Een waarde die geen datum is, wordt NULL en het rapport telt hem.

    Rapportregel: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NaN en Infinity behouden

    Drijvendekommatypen in PostgreSQL kunnen NaN en oneindig bevatten.

  • NUL characters in text

    verwijderd

    Tekst in PostgreSQL kan geen NUL-teken bevatten. Het wordt verwijderd en het rapport telt de waarden.

    Rapportregel: nul_removed

  • text that isn't valid in its encoding

    de foute bytes als het vervangingsteken

    Tekst in PostgreSQL moet geldige UTF-8 zijn.

    Rapportregel: invalid_utf8_replaced

  • text decoded twice (ñ)

    ongewijzigd gekopieerd

    Het script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.

    Rapportregel: mojibake_suspected

In OracleIn PostgreSQLRapportregel
BOOLEAN (23ai)booleanTRUE en FALSE blijven true en false.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGvarchar(n) en textLengtes tellen tekens, of Oracle nu bytes of tekens telde, zodat elke waarde past.
NUMBER, NUMBER(p,s), FLOAT(b)numeric(p,s) of bigintNUMBER behoudt elk cijfer; een NUMBER zonder precisie waarvan alle waarden gehele getallen van hoogstens 18 cijfers zijn, wordt een 64-bits integer, en een negatieve schaal krijgt evenveel cijfers voor de komma.
DATE, TIMESTAMP(p)timestamp(p)DATE in Oracle bevat een tijd tot op de seconde, dus het is een datum met tijd. Een export in een Amerikaanse of Duitse sessie schrijft datums zonder tijd of eeuw (DD-MON-RR); exporteer in een ISO-sessie (SYYYY-MM-DD HH24:MI:SS) om ze te behouden.
TIMESTAMP(7) to TIMESTAMP(9)zes cijfers van een seconde, het zevende afgekaptPostgreSQL bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag.fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEtimestamptz, dezelfde momententimestamptz behoudt het moment; PostgreSQL toont het in de tijdzone van de sessie in plaats van de offset die elke waarde had.
JSON (21c), and CLOB holding JSONjsonbDezelfde JSON-waarden; een SQL-NULL die de export als 'null' schreef, blijft NULL.
BLOB, RAW(n), LONG RAWbyteaBytes blijven bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtext, en xml voor XMLTYPEDe eigen typen van Oracle hebben geen equivalent; hun waarden behouden hun tekst, ROWID-waarden inbegrepen, al betekenen die buiten Oracle niets.type_replaced
collations that ignore case (BINARY_CI)exacte vergelijkingPostgreSQL vergelijkt tekst exact, dus kolommen die in Oracle hoofdletters negeerden, onderscheiden nu Ana en ana.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsGENERATED BY DEFAULT AS IDENTITY, verdergaand na het hoogste idDe gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste. Een kolom die een trigger vult uit een sequence (de manier van voor 12c) wordt ook een identity-kolom.
CREATE SEQUENCECREATE SEQUENCE met dezelfde optiesDe export schrijft hoe ver een sequence is gekomen als zijn START WITH, dus hij gaat daar verder.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)gegenereerde kolommen, STOREDPostgreSQL 13 tot en met 17 slaan gegenereerde kolommen alleen op; de formule is dezelfde, met || zo geschreven dat NULL als leeg telt, zoals in Oracle.virtual_as_stored
virtual columns with functions IntoSQL doesn't write, and the || operatoreen gewone kolomEen formule die niet voor PostgreSQL kan worden geschreven, levert een gewone kolom en een regel in het rapport op; de waarden die de export voor virtuele kolommen schreef, worden weggelaten, en PostgreSQL kan ze niet berekenen.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)geen standaardwaardeEen standaardwaarde die niet voor PostgreSQL kan worden geschreven, wordt weggelaten en gemeld.default_not_translated
CHECK constraintsvertaaldDezelfde checks, getest terwijl elke rij laadt.
CHECK constraints with functions IntoSQL doesn't writeniet aangemaaktEen check die niet voor PostgreSQL kan worden geschreven, wordt weggelaten en gemeld.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEniet aangemaaktOracle past deze checks niet toe op de rijen die er al zijn, dus de rijen kunnen ze schenden.check_not_enforced
function-based, bitmap and domain indexesniet aangemaaktIntoSQL schrijft b-tree-indexen op kolommen; maak de andere na het laden opnieuw aan.index_skipped
foreign keysrefererende sleutels, na de rijenDe rijen laden in willekeurige volgorde, en de sleutels controleren ze daarna.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesniet aangemaaktEen sleutel kan niet verwijzen naar een tabel die er niet is, en een sleutel die Oracle niet controleert, kan rijen zonder ouder hebben.foreign_key_skipped
partitioned tableséén tabel met de rijen van elke partitieDe rijen zijn dezelfde; partitioneer de tabel opnieuw in PostgreSQL als dat nodig is.partitions_dropped
NOT NULL columns with values that become NULLNOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersvermeld in het rapportHun code is geschreven in PL/SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.not_converted_objects
exports without CREATE TABLE (data only)typen afgeleid uit de waardenEen export met alleen data bevat alleen rijen, dus de typen komen uit de waarden.no_schema
expressions in INSERT values other than the ones exports writeNULLEen converter die geen database draait, kan ze niet evalueren; to_date, to_timestamp, TO_CLOB, HEXTORAW en de andere die exports schrijven, worden gelezen.expression_value
types IntoSQL doesn't know, and object typestextText kan elke waarde bevatten; wijzig het type na het laden.unknown_type
dates before year 1 and time zones given as region namesNULLEen waarde die geen datum is, wordt NULL en het rapport telt hem.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENaN en Infinity behoudenDrijvendekommatypen in PostgreSQL kunnen NaN en oneindig bevatten.
NUL characters in textverwijderdTekst in PostgreSQL kan geen NUL-teken bevatten. Het wordt verwijderd en het rapport telt de waarden.nul_removed
text that isn't valid in its encodingde foute bytes als het vervangingstekenTekst in PostgreSQL moet geldige UTF-8 zijn.invalid_utf8_replaced
text decoded twice (ñ)ongewijzigd gekopieerdHet script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.mojibake_suspected

Het script in PostgreSQL laden

Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.

psql -v ON_ERROR_STOP=1 -d mydb -f oracle.postgresql.sql

Refererende sleutels worden toegevoegd als NOT VALID en daarna gevalideerd. Verwijst een rij naar een rij die niet bestaat, dan vertelt het script je welke constraint het is, in plaats van halverwege te mislukken.

Maak voor een grote dump eerst de database aan en voer het script uit met psql vanaf dezelfde machine als de server.

IntoSQL Pro laadt het bestand rechtstreeks in PostgreSQL vanuit de desktopapp of de opdrachtregel, zonder een script te schrijven.

Een dump van Oracle maken voor het beste resultaat

De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:

  • Kies in SQL Developer Tools, Database Export, met DDL en het dataformaat Insert. SQLcl schrijft hetzelfde met SET SQLFORMAT INSERT.
  • Voer ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' uit voordat je exporteert: het standaardformaat schrijft datums zonder tijd of eeuw.
  • Een .dmp-bestand van exp of expdp is binair: importeer het in een Oracle-database, bijvoorbeeld Oracle Database Free in Docker, en exporteer het met SQL Developer.

Wat niet wordt geconverteerd

Weergaven, packages, procedures, functies, triggers, typen en synoniemen zijn geschreven in PL/SQL. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor PostgreSQL.

Vragen over Oracle naar PostgreSQL

Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina

Wordt mijn dump geüpload?

Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.

Hoe groot mag de dump zijn?

De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.

Kan ik een .dmp-bestand van exp of expdp converteren?

Niet direct: Data Pump en de oorspronkelijke Export schrijven een binair formaat dat alleen Oracle leest. Importeer het bestand in een willekeurige Oracle-database (Oracle Database Free draait in Docker) en exporteer het met Database Export van SQL Developer of met SQLcl. De converter meldt dat wanneer hij een .dmp-bestand krijgt.

Van welke Oracle-versies kan de export komen?

Exports uit SQL Developer en SQLcl, met de tabeldefinities van DBMS_METADATA, vanaf Oracle 11g. Elke testexport komt van Oracle 21c en 23ai, in Amerikaanse, Duitse en ISO-sessies, en wordt cel voor cel met zijn bron vergeleken.

Wat gebeurt er met NUMBER, DATE en de andere Oracle-typen?

NUMBER wordt numeric, of bigint als elke waarde een geheel getal is; DATE wordt timestamp en behoudt zijn tijd; CLOB wordt text, BLOB en RAW bytea, BINARY_DOUBLE double precision met NaN en Infinity, en intervallen interval.

Blijven identity-kolommen en sequences behouden?

Ja. Identity-kolommen blijven identity-kolommen en gaan verder na het hoogste id, net als een kolom die een trigger vult uit een sequence. Sequences gaan verder vanaf waar ze volgens de export waren gekomen.

En PL/SQL-packages, procedures en triggers?

Ze staan op naam in het rapport en worden niet geconverteerd, omdat elke database ze in een eigen taal schrijft.

Op welke PostgreSQL-versies laadt het script?

PostgreSQL 13 tot en met 18. Hetzelfde script laadt op elk ervan en stopt bij de eerste fout als er iets misgaat.