---
title: "Migrare Oracle a PostgreSQL nel browser"
description: "Migra un database Oracle a PostgreSQL: converti un export di SQL Developer o SQLcl in uno script con le stesse tabelle, chiavi e dati, e un report."
canonical: https://intosql.com/it/oracle-in-postgresql
last_updated: 2026-10-15
---

# Migrare Oracle a PostgreSQL nel browser

Trascina il file .sql che scrive Database Export di SQL Developer o SQLcl, con le sue tabelle e istruzioni Insert, e scarica uno script per PostgreSQL con le stesse tabelle, chiavi, indici e dati. Ogni valore che PostgreSQL non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

[Guida alla migrazione da Oracle a PostgreSQL](https://intosql.com/docs/migrations/oracle-to-postgresql)

[Tipi di dati da Oracle a PostgreSQL](https://intosql.com/docs/types/oracle-to-postgresql)

## Cosa cambia da Oracle a PostgreSQL

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

| In Oracle | In PostgreSQL | Riga del report |
| --- | --- | --- |
| BOOLEAN (23ai) | boolean |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) e text |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | numeric(p,s), o bigint |  |
| DATE, TIMESTAMP(p) | timestamp(p) |  |
| TIMESTAMP(7) to TIMESTAMP(9) | sei cifre di secondo, la settima troncata | `fraction_cut` |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | timestamptz, gli stessi istanti |  |
| JSON (21c), and CLOB holding JSON | jsonb |  |
| BLOB, RAW(n), LONG RAW | bytea |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | text, e xml per XMLTYPE | `type_replaced` |
| collations that ignore case (BINARY_CI) | confronto esatto | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT AS IDENTITY, che riparte dopo l'id più alto |  |
| CREATE SEQUENCE | CREATE SEQUENCE con le stesse opzioni |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | colonne generate, STORED | `virtual_as_stored` |
| virtual columns with functions IntoSQL doesn't write, and the || operator | una colonna semplice | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | nessun valore predefinito | `default_not_translated` |
| CHECK constraints | tradotti |  |
| CHECK constraints with functions IntoSQL doesn't write | non creato | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | non creato | `check_not_enforced` |
| function-based, bitmap and domain indexes | non creato | `index_skipped` |
| foreign keys | chiavi esterne, dopo le righe |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | non creato | `foreign_key_skipped` |
| partitioned tables | una tabella con le righe di ogni partizione | `partitions_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL rimosso | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | elencati nel report | `not_converted_objects` |
| exports without CREATE TABLE (data only) | tipi ricavati dai valori | `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 e Infinity mantenuti |  |
| NUL characters in text | rimosso | `nul_removed` |
| text that isn't valid in its encoding | i byte errati come carattere di sostituzione | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiato così com'è | `mojibake_suspected` |

## Carica lo script in PostgreSQL

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

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

Le chiavi esterne vengono aggiunte come NOT VALID e poi validate. Se una riga punta a una riga che non esiste, lo script ti dice quale vincolo, invece di fallire a metà.

Per un dump grande, crea prima il database ed esegui lo script con psql dalla stessa macchina del server.

IntoSQL Pro carica il file direttamente in PostgreSQL dall'app desktop o dalla riga di comando, senza scrivere uno script.

## Fai il dump di Oracle per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

- In SQL Developer, scegli Tools, Database Export, con DDL e il formato dati Insert. SQLcl scrive lo stesso con SET SQLFORMAT INSERT.
- Esegui ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' prima di esportare: il formato di default scrive le date senza ora né secolo.
- Un file .dmp di exp o expdp è binario: importalo in un database Oracle, per esempio Oracle Database Free in Docker, ed esportalo con SQL Developer.

## Cosa non viene convertito

Viste, package, procedure, funzioni, trigger, tipi e sinonimi sono scritti in PL/SQL. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per PostgreSQL.

## Domande sulla conversione da Oracle a PostgreSQL

### Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

### Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

### Posso convertire un file .dmp di exp o expdp?

Non direttamente: Data Pump e l'Export originale scrivono un formato binario che legge solo Oracle. Importalo in un qualsiasi database Oracle, Oracle Database Free gira in Docker, ed esportalo con Database Export di SQL Developer o con SQLcl. Il convertitore lo segnala quando riceve un file .dmp.

### Da quali versioni di Oracle può provenire l'export?

Export di SQL Developer e SQLcl, con le definizioni di tabella di DBMS_METADATA, da Oracle 11g in poi. Ogni export di test viene da Oracle 21c e 23ai, in sessioni americane, tedesche e ISO, ed è confrontato con la sorgente cella per cella.

### Cosa succede a NUMBER, DATE e agli altri tipi di Oracle?

NUMBER diventa numeric, o bigint quando ogni valore è un numero intero; DATE diventa timestamp, mantenendo l'ora; CLOB text, BLOB e RAW bytea, BINARY_DOUBLE double precision con NaN e Infinity, e gli intervalli interval.

### Le colonne identity e le sequenze vengono mantenute?

Sì. Le colonne identity restano colonne identity e ripartono dopo l'id più alto, e così una colonna che un trigger riempie da una sequenza. Le sequenze ripartono da dove l'export dice che sono arrivate.

### E package, procedure e trigger PL/SQL?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

### Su quali versioni di PostgreSQL si carica lo script?

PostgreSQL dalla 13 alla 18. Lo stesso script si carica su ognuna, fermandosi al primo errore se qualcosa va storto.

## Da Oracle

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

## Verso PostgreSQL

- [Da MySQL a PostgreSQL](https://intosql.com/it/mysql-in-postgresql)
- [Da MariaDB a PostgreSQL](https://intosql.com/it/mariadb-in-postgresql)
- [Da PostgreSQL a PostgreSQL](https://intosql.com/it/postgresql-in-postgresql)
- [Da SQL Server a PostgreSQL](https://intosql.com/it/sql-server-in-postgresql)
- [Da SQLite a PostgreSQL](https://intosql.com/it/sqlite-in-postgresql)

## Guida e tutte le coppie

- [Da PostgreSQL a Oracle](https://intosql.com/it/postgresql-in-oracle)
- [Guida alla migrazione da Oracle a PostgreSQL](https://intosql.com/docs/migrations/oracle-to-postgresql)
- [Tipi di dati da Oracle a PostgreSQL](https://intosql.com/docs/types/oracle-to-postgresql)
- [Tutte le coppie di database](https://intosql.com/it/migrazione-database)
