---
title: "Перенос дампа PostgreSQL на другую версию"
description: "Конвертируйте файл pg_dump из PostgreSQL 10 или новее в скрипт, который загружается на PostgreSQL с 13 по 18, с теми же таблицами, ключами и данными и отчетом."
canonical: https://intosql.com/ru/postgresql-v-postgresql
last_updated: 2026-10-15
---

# Перенос дампа PostgreSQL на другую версию

Перетащите обычный дамп из pg_dump или pg_dumpall в формате .sql или .sql.gz и скачайте один скрипт, который загружается на PostgreSQL с 13 по 18, какая бы версия ни записала дамп. Identity, enum, массивы и jsonb остаются как есть, типы из расширений становятся text, и каждое изменение указано в отчете.

[Руководство по миграции PostgreSQL в PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)

[Типы данных из PostgreSQL в PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)

## Что меняется между файлом и скриптом

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

| В файле | В скрипте | Строка отчета |
| --- | --- | --- |
| varchar(n), char(n), text | те же типы |  |
| numeric(p,s), numeric without a precision, NaN and Infinity | те же типы и значения |  |
| money | numeric(19,2) | `type_replaced` |
| enum types | те же типы enum, создаются до таблиц |  |
| enum columns holding values outside their labels | text без проверки | `enum_check_skipped` |
| composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multiranges | text с текстом PostgreSQL | `type_replaced` |
| citext | text, точное сравнение | `case_insensitive_collation` |
| json, jsonb | те же типы |  |
| timestamp with time zone | timestamptz, те же моменты |  |
| time, time with time zone | те же типы |  |
| infinity, -infinity and BC dates | сохраняется |  |
| NaN and Infinity in numeric, real and double precision | сохраняется |  |
| generated columns | те же генерируемые столбцы |  |
| generated columns with functions IntoSQL doesn't write | обычный столбец со значениями | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write | без значения по умолчанию | `default_not_translated` |
| CHECK constraints with functions IntoSQL doesn't write | не создается | `check_skipped` |
| CHECK ... NOT VALID | добавляется как NOT VALID после строк |  |
| gin, gist, brin and hash indexes, partial and expression indexes | не создается | `index_skipped` |
| foreign keys to tables the dump doesn't create | не создается | `foreign_key_skipped` |
| NOT NULL columns with values that become NULL | NOT NULL снимается | `not_null_relaxed` |
| partitioned tables | одна таблица со строками всех секций | `partitions_dropped` |
| views, functions, procedures, triggers, rules, policies, extensions and types other than enums | перечисляются в отчете | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | типы определяются по значениям | `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 | неверные байты заменяются символом замены | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | копируется как есть | `mojibake_suspected` |

## Загрузите скрипт в PostgreSQL

Скрипт создает таблицы, копирует строки, затем добавляет ключи, индексы и внешние ключи, поэтому загрузка идет быстро и останавливается на первой ошибке.

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

Внешние ключи добавляются как NOT VALID, а затем проверяются. Если строка ссылается на несуществующую строку, скрипт сообщает, какое ограничение нарушено, а не прерывается на полпути.

Для большого дампа сначала создайте базу данных и запустите скрипт через psql на той же машине, где работает сервер.

IntoSQL Pro загружает файл прямо в PostgreSQL из приложения для компьютера или командной строки, без написания скрипта.

## Как создать дамп PostgreSQL для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

- --format=plain, формат pg_dump по умолчанию, пишет SQL. Архив custom или directory (-Fc, -Fd) превращается в SQL командой pg_restore -f dump.sql, без сервера баз данных.
- --no-owner --no-privileges исключают роли и права, которые конвертер все равно пропускает, поэтому дамп получается меньше.
- pg_dumpall сохраняет все базы данных в один файл; имена таблиц каждой базы начинаются с ее имени, поэтому ничего не конфликтует.

## Что не конвертируется

Представления, триггеры, процедуры, функции и другие объекты, написанные на собственном языке PostgreSQL, перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли проверить каждый на той версии PostgreSQL, в которую загружаете, прежде чем создать его заново.

## Вопросы о переносе PostgreSQL между версиями

### Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

### Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

### Читает ли он архивы pg_dump -Fc?

Не напрямую: архив custom - это двоичный формат. pg_restore -f dump.sql dump.backup превращает его в обычный SQL, который читает конвертер, без подключения к серверу. Получив архив, конвертер так и сообщает.

### Из каких версий PostgreSQL может быть дамп?

Дампы, записанные pg_dump и pg_dumpall из PostgreSQL 10 и новее, со строками COPY или INSERT. Каждый тестовый дамп создан в PostgreSQL 13 и 18 и сверен с источником ячейка за ячейкой.

### Сохраняются ли значения serial и identity?

Да. Столбцы serial и identity остаются столбцами identity, каждая строка сохраняет свой id, а каждый счетчик продолжается со значения, которого достигла последовательность в дампе.

### Что происходит с массивами, enum и другими типами PostgreSQL?

Они остаются как есть: массивы, диапазоны, json и jsonb, битовые строки; исключение - money. Типы enum создаются заново со своими метками. Типы из расширений (citext, hstore, PostGIS) и составные типы становятся text, а отчет указывает, какие столбцы.

### А функции, триггеры и представления?

Они перечислены в отчете по имени и не конвертируются, чтобы вы могли создать их заново, когда таблицы будут загружены. Проверки NOT VALID добавляются после строк и по-прежнему имеют статус NOT VALID.

### На каких версиях PostgreSQL загружается скрипт?

PostgreSQL с 13 по 18, какой бы версией ни был записан дамп. Один и тот же скрипт загружается на каждой из них и останавливается на первой ошибке, если что-то пойдет не так.

## Из PostgreSQL

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

## В PostgreSQL

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

## Руководство и все пары

- [Руководство по миграции PostgreSQL в PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)
- [Типы данных из PostgreSQL в PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)
- [Все пары баз данных](https://intosql.com/ru/migratsiya-bazy-dannykh)
