---
title: "Levar um dump do PostgreSQL para outra versão"
description: "Converta um arquivo do pg_dump do PostgreSQL 10 ou posterior em um script que carrega no PostgreSQL 13 ao 18, com as mesmas tabelas, chaves e dados."
canonical: https://intosql.com/pt-br/postgresql-para-postgresql
last_updated: 2026-10-15
---

# Levar um dump do PostgreSQL para outra versão

Solte um dump simples do pg_dump ou pg_dumpall, como .sql ou .sql.gz, e baixe um script que carrega no PostgreSQL 13 ao 18, seja qual for a versão que escreveu o dump. Identities, enums, arrays e jsonb ficam como estão, tipos trazidos por uma extensão viram texto, e cada mudança é listada no relatório.

[Guia de migração de PostgreSQL para PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)

[Tipos de dados de PostgreSQL para PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)

## O que muda entre o arquivo e o script

Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.

| No arquivo | No script | Linha do relatório |
| --- | --- | --- |
| varchar(n), char(n), text | os mesmos tipos |  |
| numeric(p,s), numeric without a precision, NaN and Infinity | os mesmos tipos e valores |  |
| money | numeric(19,2) | `type_replaced` |
| enum types | os mesmos tipos enum, criados antes das tabelas |  |
| enum columns holding values outside their labels | text sem CHECK | `enum_check_skipped` |
| composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multiranges | text com o texto do PostgreSQL | `type_replaced` |
| citext | text, comparado de forma exata | `case_insensitive_collation` |
| json, jsonb | os mesmos tipos |  |
| timestamp with time zone | timestamptz, os mesmos instantes |  |
| time, time with time zone | os mesmos tipos |  |
| infinity, -infinity and BC dates | mantidas |  |
| NaN and Infinity in numeric, real and double precision | mantidos |  |
| generated columns | as mesmas colunas geradas |  |
| generated columns with functions IntoSQL doesn't write | uma coluna simples com os valores | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write | sem valor padrão | `default_not_translated` |
| CHECK constraints with functions IntoSQL doesn't write | não criado | `check_skipped` |
| CHECK ... NOT VALID | adicionado NOT VALID depois das linhas |  |
| gin, gist, brin and hash indexes, partial and expression indexes | não criado | `index_skipped` |
| foreign keys to tables the dump doesn't create | não criada | `foreign_key_skipped` |
| NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| partitioned tables | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| views, functions, procedures, triggers, rules, policies, extensions and types other than enums | listados no relatório | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos lidos dos valores | `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 | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `mojibake_suspected` |

## Carregue o script no PostgreSQL

O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.

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

As chaves estrangeiras são adicionadas como NOT VALID e depois validadas. Se uma linha aponta para uma linha que não existe, o script informa qual restrição, em vez de falhar no meio do caminho.

Para um dump grande, crie o banco de dados antes e execute o script com o psql na mesma máquina do servidor.

O IntoSQL Pro carrega o arquivo direto no PostgreSQL pelo app para desktop ou pela linha de comando, sem escrever um script.

## Gere o dump do PostgreSQL para o melhor resultado

O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:

- --format=plain, o padrão do pg_dump, escreve SQL. Um arquivo custom ou de diretório (-Fc, -Fd) vira SQL com pg_restore -f dump.sql, sem servidor de banco de dados.
- --no-owner --no-privileges deixam de fora papéis e permissões, que o conversor ignora de qualquer forma, então o dump fica menor.
- O pg_dumpall gera o dump de todos os bancos de dados em um arquivo; as tabelas de cada um recebem o nome dele, então nada colide.

## O que não é convertido

Views, triggers, procedures, funções e outros objetos escritos na própria linguagem do PostgreSQL aparecem no relatório pelo nome, nunca são descartados em silêncio, para você conferir cada um com a versão do PostgreSQL em que vai carregar antes de recriá-lo.

## Perguntas sobre levar o PostgreSQL entre versões

### Meu dump é enviado?

Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.

### Qual o tamanho máximo do dump?

O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.

### Ele lê arquivos do pg_dump -Fc?

Não diretamente: um arquivo custom é um formato binário. pg_restore -f dump.sql dump.backup o transforma no SQL simples que o conversor lê, sem se conectar a um servidor. O conversor avisa quando recebe um arquivo desses.

### De quais versões do PostgreSQL o dump pode vir?

Dumps escritos pelo pg_dump e pg_dumpall do PostgreSQL 10 em diante, com linhas em COPY ou INSERT. Cada dump de teste vem do PostgreSQL 13 e 18 e é comparado com a origem célula por célula.

### Os valores serial e identity são mantidos?

Sim. Colunas serial e identity continuam colunas identity, cada linha mantém seu id, e cada contador continua a partir do valor que a sequência do dump tinha alcançado.

### O que acontece com arrays, enums e outros tipos do PostgreSQL?

Eles ficam como estão: arrays, ranges, json e jsonb, strings de bits, exceto money. Os tipos enum são criados de novo com seus rótulos. Tipos que uma extensão traz (citext, hstore, PostGIS) e tipos compostos viram text, e o relatório diz quais colunas.

### E as funções, gatilhos e visões?

Eles aparecem no relatório pelo nome e não são convertidos, para que você possa recriá-los quando as tabelas estiverem prontas. CHECKs NOT VALID são adicionados depois das linhas, ainda não validados.

### Em quais versões do PostgreSQL o script carrega?

PostgreSQL 13 a 18, qualquer que seja a versão que escreveu o dump. O mesmo script carrega em cada uma delas e para no primeiro erro se algo der errado.

## De PostgreSQL

- [PostgreSQL para MySQL](https://intosql.com/pt-br/postgresql-para-mysql)
- [PostgreSQL para MariaDB](https://intosql.com/pt-br/postgresql-para-mariadb)
- [PostgreSQL para SQLite](https://intosql.com/pt-br/postgresql-para-sqlite)
- [PostgreSQL para SQL Server](https://intosql.com/pt-br/postgresql-para-sql-server)
- [PostgreSQL para Oracle](https://intosql.com/pt-br/postgresql-para-oracle)

## Para PostgreSQL

- [MySQL para PostgreSQL](https://intosql.com/pt-br/mysql-para-postgresql)
- [MariaDB para PostgreSQL](https://intosql.com/pt-br/mariadb-para-postgresql)
- [SQL Server para PostgreSQL](https://intosql.com/pt-br/sql-server-para-postgresql)
- [SQLite para PostgreSQL](https://intosql.com/pt-br/sqlite-para-postgresql)
- [Oracle para PostgreSQL](https://intosql.com/pt-br/oracle-para-postgresql)

## Guia e todos os pares

- [Guia de migração de PostgreSQL para PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)
- [Tipos de dados de PostgreSQL para PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)
- [Todos os pares de bancos de dados](https://intosql.com/pt-br/migracao-de-banco-de-dados)
