---
title: "Portare un dump PostgreSQL a un'altra versione"
description: "Converti un file pg_dump di PostgreSQL 10 o successivo in uno script che si carica su PostgreSQL da 13 a 18, con le stesse tabelle, chiavi e dati, e un report."
canonical: https://intosql.com/it/postgresql-in-postgresql
last_updated: 2026-10-15
---

# Portare un dump PostgreSQL a un'altra versione

Trascina un dump in testo semplice di pg_dump o pg_dumpall, come .sql o .sql.gz, e scarica uno script che si carica su PostgreSQL da 13 a 18, qualunque versione abbia scritto il dump. Identity, enum, array e jsonb restano come sono, i tipi portati da un'estensione diventano testo, e ogni modifica è elencata nel report.

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

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

## Cosa cambia tra il file e lo script

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

| Nel file | Nello script | Riga del report |
| --- | --- | --- |
| varchar(n), char(n), text | gli stessi tipi |  |
| numeric(p,s), numeric without a precision, NaN and Infinity | gli stessi tipi e valori |  |
| money | numeric(19,2) | `type_replaced` |
| enum types | gli stessi tipi enum, creati prima delle tabelle |  |
| enum columns holding values outside their labels | text senza CHECK | `enum_check_skipped` |
| composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multiranges | text con il testo di PostgreSQL | `type_replaced` |
| citext | text, confrontato in modo esatto | `case_insensitive_collation` |
| json, jsonb | gli stessi tipi |  |
| timestamp with time zone | timestamptz, gli stessi istanti |  |
| time, time with time zone | gli stessi tipi |  |
| infinity, -infinity and BC dates | mantenuto |  |
| NaN and Infinity in numeric, real and double precision | mantenuto |  |
| generated columns | le stesse colonne generate |  |
| generated columns with functions IntoSQL doesn't write | una colonna semplice con i valori | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write | nessun valore predefinito | `default_not_translated` |
| CHECK constraints with functions IntoSQL doesn't write | non creato | `check_skipped` |
| CHECK ... NOT VALID | aggiunto NOT VALID dopo le righe |  |
| gin, gist, brin and hash indexes, partial and expression indexes | non creato | `index_skipped` |
| foreign keys to tables the dump doesn't create | non creato | `foreign_key_skipped` |
| NOT NULL columns with values that become NULL | NOT NULL rimosso | `not_null_relaxed` |
| partitioned tables | una tabella con le righe di ogni partizione | `partitions_dropped` |
| views, functions, procedures, triggers, rules, policies, extensions and types other than enums | elencati nel report | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipi ricavati dai valori | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | text | `unknown_type` |
| 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 postgresql.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 PostgreSQL per il miglior risultato

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

- --format=plain, il default di pg_dump, scrive SQL. Un archivio custom o directory (-Fc, -Fd) diventa SQL con pg_restore -f dump.sql, senza un server di database.
- --no-owner --no-privileges escludono ruoli e permessi, che il convertitore comunque salta, così il dump è più piccolo.
- pg_dumpall esporta ogni database in un solo file; le tabelle di ognuno hanno il suo nome davanti, così niente entra in conflitto.

## Cosa non viene convertito

Viste, trigger, procedure, funzioni e altri oggetti scritti nel linguaggio di PostgreSQL sono elencati per nome nel report, mai eliminati in silenzio, così puoi verificare ognuno con la versione di PostgreSQL in cui carichi prima di ricrearlo.

## Domande sul passaggio di PostgreSQL tra versioni

### 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.

### Legge gli archivi pg_dump -Fc?

Non direttamente: un archivio custom è un formato binario. pg_restore -f dump.sql dump.backup lo trasforma nel SQL plain che il convertitore legge, senza connettersi a un server. Il convertitore lo dice quando riceve un archivio.

### Da quali versioni di PostgreSQL può provenire il dump?

Dump scritti da pg_dump e pg_dumpall da PostgreSQL 10 in poi, con righe COPY o INSERT. Ogni dump di test viene da PostgreSQL 13 e 18 ed è confrontato con la sorgente cella per cella.

### I valori serial e identity vengono mantenuti?

Sì. Le colonne serial e identity restano colonne identity, ogni riga mantiene il suo id e ogni contatore riparte dal valore che la sequenza del dump aveva raggiunto.

### Cosa succede ad array, enum e altri tipi di PostgreSQL?

Restano come sono: array, range, json e jsonb, stringhe di bit, money a parte. I tipi enum vengono ricreati con le loro etichette. I tipi portati da un'estensione (citext, hstore, PostGIS) e i tipi composti diventano testo, e il report dice quali colonne.

### E funzioni, trigger e viste?

Sono elencati per nome nel report e non vengono convertiti, così puoi ricrearli una volta caricate le tabelle. I CHECK NOT VALID vengono aggiunti dopo le righe, ancora non validi.

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

PostgreSQL dalla 13 alla 18, qualunque versione abbia scritto il dump. Lo stesso script si carica su ognuna, fermandosi al primo errore se qualcosa va storto.

## Da PostgreSQL

- [Da PostgreSQL a MySQL](https://intosql.com/it/postgresql-in-mysql)
- [Da PostgreSQL a MariaDB](https://intosql.com/it/postgresql-in-mariadb)
- [Da PostgreSQL a SQLite](https://intosql.com/it/postgresql-in-sqlite)
- [Da PostgreSQL a SQL Server](https://intosql.com/it/postgresql-in-sql-server)
- [Da PostgreSQL a Oracle](https://intosql.com/it/postgresql-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 SQL Server a PostgreSQL](https://intosql.com/it/sql-server-in-postgresql)
- [Da SQLite a PostgreSQL](https://intosql.com/it/sqlite-in-postgresql)
- [Da Oracle a PostgreSQL](https://intosql.com/it/oracle-in-postgresql)

## Guida e tutte le coppie

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