---
title: "Chuyển bản dump PostgreSQL sang phiên bản khác"
description: "Chuyển tệp pg_dump từ PostgreSQL 10 trở lên thành tập lệnh nạp được trên PostgreSQL 13 đến 18, cùng bảng, khóa và dữ liệu, kèm báo cáo mọi thay đổi."
canonical: https://intosql.com/vi/postgresql-sang-postgresql
last_updated: 2026-10-15
---

# Chuyển bản dump PostgreSQL sang phiên bản khác

Thả bản dump thuần từ pg_dump hoặc pg_dumpall, dạng .sql hoặc .sql.gz, và tải xuống một tập lệnh nạp được trên PostgreSQL 13 đến 18, dù phiên bản nào viết bản dump. Identity, enum, mảng và jsonb giữ nguyên, kiểu do extension mang lại thành text, và mọi thay đổi được liệt kê trong báo cáo.

[Hướng dẫn di chuyển PostgreSQL sang PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)

[Kiểu dữ liệu từ PostgreSQL sang PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)

## Những gì thay đổi giữa tệp và tập lệnh

Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.

| Trong tệp | Trong tập lệnh | Dòng báo cáo |
| --- | --- | --- |
| varchar(n), char(n), text | cùng các kiểu |  |
| numeric(p,s), numeric without a precision, NaN and Infinity | cùng các kiểu và giá trị |  |
| money | numeric(19,2) | `type_replaced` |
| enum types | cùng các enum type, được tạo trước các bảng |  |
| enum columns holding values outside their labels | text không có ràng buộc kiểm tra | `enum_check_skipped` |
| composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multiranges | text với văn bản của PostgreSQL | `type_replaced` |
| citext | text, so sánh chính xác | `case_insensitive_collation` |
| json, jsonb | cùng các kiểu |  |
| timestamp with time zone | timestamptz, cùng các thời điểm |  |
| time, time with time zone | cùng các kiểu |  |
| infinity, -infinity and BC dates | được giữ |  |
| NaN and Infinity in numeric, real and double precision | được giữ |  |
| generated columns | cùng các cột tính toán |  |
| generated columns with functions IntoSQL doesn't write | một cột thường với các giá trị | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write | không có giá trị mặc định | `default_not_translated` |
| CHECK constraints with functions IntoSQL doesn't write | không được tạo | `check_skipped` |
| CHECK ... NOT VALID | thêm NOT VALID sau các hàng |  |
| gin, gist, brin and hash indexes, partial and expression indexes | không được tạo | `index_skipped` |
| foreign keys to tables the dump doesn't create | không được tạo | `foreign_key_skipped` |
| NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| partitioned tables | một bảng chứa các hàng của mọi phân vùng | `partitions_dropped` |
| views, functions, procedures, triggers, rules, policies, extensions and types other than enums | được liệt kê trong báo cáo | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | kiểu suy ra từ giá trị | `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 | byte lỗi thành ký tự thay thế | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | sao chép nguyên trạng | `mojibake_suspected` |

## Nạp tập lệnh vào PostgreSQL

Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.

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

Khóa ngoại được thêm dưới dạng NOT VALID rồi được xác thực. Nếu một hàng trỏ tới hàng không tồn tại, tập lệnh cho bạn biết ràng buộc nào, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy tạo cơ sở dữ liệu trước và chạy tập lệnh bằng psql trên cùng máy với máy chủ.

IntoSQL Pro nạp tệp thẳng vào PostgreSQL từ ứng dụng máy tính hoặc dòng lệnh, không cần tạo tập lệnh.

## Tạo bản dump PostgreSQL để có kết quả tốt nhất

Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:

- --format=plain, mặc định của pg_dump, ghi ra SQL. Kho lưu trữ custom hoặc directory (-Fc, -Fd) thành SQL bằng pg_restore -f dump.sql, không cần máy chủ cơ sở dữ liệu.
- --no-owner --no-privileges bỏ vai trò và quyền, những thứ trình chuyển đổi vốn bỏ qua, nên bản dump nhỏ hơn.
- pg_dumpall dump mọi cơ sở dữ liệu vào một tệp; bảng của mỗi cơ sở dữ liệu có tên của nó ở đầu, nên không có gì trùng.

## Những gì không được chuyển đổi

View, trigger, thủ tục, hàm và các đối tượng khác viết bằng ngôn ngữ riêng của PostgreSQL được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn kiểm tra từng cái với phiên bản PostgreSQL bạn nạp vào trước khi tạo lại.

## Câu hỏi về chuyển PostgreSQL giữa các phiên bản

### Bản dump của tôi có bị tải lên không?

Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.

### Bản dump có thể lớn đến đâu?

Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.

### Nó có đọc được kho lưu trữ pg_dump -Fc không?

Không trực tiếp: kho lưu trữ custom là định dạng nhị phân. pg_restore -f dump.sql dump.backup chuyển nó thành SQL dạng plain mà trình chuyển đổi đọc được, không cần kết nối máy chủ. Trình chuyển đổi sẽ báo khi nhận một kho lưu trữ.

### Bản dump có thể đến từ những phiên bản PostgreSQL nào?

Bản dump do pg_dump và pg_dumpall ghi từ PostgreSQL 10 trở lên, với các hàng COPY hoặc INSERT. Mọi bản dump thử nghiệm đến từ PostgreSQL 13 và 18 và được so với nguồn từng ô một.

### Giá trị serial và identity có được giữ không?

Có. Cột serial và identity vẫn là cột identity, mọi hàng giữ id của nó, và mỗi bộ đếm tiếp tục từ giá trị mà sequence của bản dump đã đạt tới.

### Mảng, enum và các kiểu PostgreSQL khác sẽ ra sao?

Chúng giữ nguyên: mảng, range, json và jsonb, chuỗi bit, trừ money. Enum type được tạo lại với các nhãn. Kiểu do tiện ích mở rộng mang lại (citext, hstore, PostGIS) và kiểu composite thành text, và báo cáo cho biết những cột nào.

### Còn hàm, trình kích hoạt và khung nhìn thì sao?

Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, để bạn tạo lại sau khi có các bảng. Ràng buộc kiểm tra NOT VALID được thêm sau các hàng, vẫn chưa hợp lệ.

### Tập lệnh nạp được trên những phiên bản PostgreSQL nào?

PostgreSQL 13 đến 18, bất kể phiên bản nào đã ghi bản dump. Cùng một tập lệnh nạp được trên từng phiên bản, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ PostgreSQL

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

## Sang PostgreSQL

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

## Hướng dẫn và mọi cặp

- [Hướng dẫn di chuyển PostgreSQL sang PostgreSQL](https://intosql.com/docs/migrations/postgresql-to-postgresql)
- [Kiểu dữ liệu từ PostgreSQL sang PostgreSQL](https://intosql.com/docs/types/postgresql-to-postgresql)
- [Mọi cặp cơ sở dữ liệu](https://intosql.com/vi/chuyen-co-so-du-lieu)
