Chuyển PostgreSQL sang MySQL
Thả bản dump dạng plain từ pg_dump hoặc pg_dumpall, dạng .sql hoặc .sql.gz, và tải xuống tập lệnh MySQL với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị MySQL không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.
Đã chuyển đổi 18 hàng, 3 bản sửa, không hàng nào bị từ chối
Các bảng trong shop_2024_postgres.sqlBản dump PostgreSQL 18.6 · do pg_dump ghi · utf8mb4
customers8 hàng2
8 cột id int not null name text not null email varchar(768) not null country char(2) not null is_active tinyint(1) not null tags json not null signed_up date created_at datetime(6) not null orders10 hàng1
10 cột id int not null customer_id int not null status enum('pending','paid','shipped','cancelled') not null total decimal(10,2) not null items smallint not null ordered_at datetime(6) not null shipped_at datetime(6) note text details json delivery varchar(100)
Không được chuyển đổi
- Khung nhìn paid_orders
Mỗi cơ sở dữ liệu viết các đối tượng này bằng ngôn ngữ riêng. Hãy viết lại chúng cho MySQL.
-- Written by IntoSQL from a PostgreSQL dump. Load it with: mysql --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';
CREATE TABLE `customers` (
`id` int NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`email` varchar(768) NOT NULL,
`country` char(2) NOT NULL DEFAULT 'US',
`is_active` tinyint(1) NOT NULL DEFAULT 1,
`tags` json NOT NULL,
`signed_up` date,
`created_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
UNIQUE KEY `customers_email_key` (`email`),
PRIMARY KEY (`id`)
) AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';
CREATE TABLE `orders` (
`id` int NOT NULL AUTO_INCREMENT,
`customer_id` int NOT NULL,
`status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
`total` decimal(10,2) NOT NULL,
`items` smallint NOT NULL DEFAULT 1,
`ordered_at` datetime(6) NOT NULL,
`shipped_at` datetime(6),
`note` text,
`details` json,
`delivery` varchar(100),
PRIMARY KEY (`id`),
KEY `idx_orders_customer` (`customer_id`),
KEY `idx_orders_status_date` (`status`,`ordered_at`),
CONSTRAINT `orders_total_check` CHECK (`total` >= (0)),
CONSTRAINT `orders_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=5001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`tags`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'["vip"]','2023-01-15','2023-01-15 10:24:00'),(2,'Zoë Müller','zoe@example.de','DE',1,'[]','2023-02-03','2023-02-03 08:11:42'),(3,'José Peña','jose@example.es','ES',0,'["wholesale","late payer"]','2023-03-21','2023-03-21 19:05:17'),(4,'李雷','lilei@example.cn','CN',1,'[]','2023-05-09','2023-05-09 02:40:00'),(5,'Noah O\'Brien','noah@example.ie','IE',1,'[]',NULL,'2023-06-30 14:00:00'),(6,'Amélie Laurent','amelie@example.fr','FR',1,'["vip"]','2024-01-02','2024-01-02 09:30:00'),(7,'Ravi Patel','ravi@example.in','IN',0,'[]','2024-02-29','2024-02-29 23:59:59'),(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'[]','2024-04-12','2024-04-12 12:12:12');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`delivery`) VALUES (1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'{"gift": false}','1 day 06:30:00'),(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}',NULL),(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind',NULL,NULL),(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','{"fragile": true}','2 days 05:50:00'),(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice',NULL,NULL),(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"','{"fragile": true}','20:00:00'),(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,NULL,NULL),(8,2,'shipped',19.99,1,'2024-03-12 08:00:00',NULL,'Shipped date set to infinity by an old import',NULL,NULL),(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','2024-03-15 10:00:00','Two parcels','{"parcels": [1, 2]}','18:30:00'),(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf',NULL,NULL);
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
Bản sửa
- "created_at" của customers chứa thời điểm kèm múi giờ; MySQL không có kiểu giữ được múi giờ, nên chúng được lưu theo UTC dưới dạng datetime(6).
- "tags" của customers là text[], kiểu MySQL không có, nên là json với cùng giá trị.
- "delivery" của orders là interval, kiểu MySQL không có, nên là varchar(100) với cùng giá trị.
Cần xem lại
- 1 khung nhìn, trình kích hoạt, thủ tục hoặc sự kiện không được chuyển đổi; báo cáo liệt kê từng mục. Hãy tạo lại chúng thủ công trong MySQL.
- Giá trị mặc định của "tags" trong customers không viết được cho MySQL (a value its type can't hold), nên cột không có giá trị mặc định. Hãy thêm giá trị mặc định thủ công nếu hàng mới cần nó.
- Chỉ mục idx_orders_details trên orders dùng một biểu thức không viết được cho MySQL (neither MySQL 5.7 nor MariaDB index an expression), nên không được tạo. Hãy tạo chỉ mục thủ công nếu truy vấn cần nó.
- 1 giá trị trong "shipped_at" của orders là ngày mà MySQL không lưu được, như infinity, nên chúng là NULL. MySQL lưu năm từ 1 đến 9999, không có vô cực; hãy thay các ngày đó trong nguồn nếu chúng quan trọng.
Tệp được chuyển đổi ngay trên máy tính này và không bao giờ được tải lên.
Mẫu khác:
Những gì thay đổi từ PostgreSQL sang MySQL
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.
boolean
tinyint(1)
BOOLEAN của MySQL là TINYINT(1): true là 1 và false là 0.
varchar(n), char(n), text
varchar(n) đến 1024 ký tự, char(n) đến 255, dài hơn là text
Văn bản giữ mọi ký tự dưới dạng utf8mb4. Cột trong khóa tối đa là varchar(768), độ dài lớn nhất một khóa chứa được, và văn bản có giá trị mặc định cũng vậy, vì MySQL 5.7 chỉ cho varchar có giá trị mặc định.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds
varchar
decimal của MySQL chứa 65 chữ số với 30 chữ số thập phân. Số rộng hơn được giữ dạng văn bản để mọi chữ số vẫn chính xác; numeric không có độ chính xác là decimal(65,30) khi giá trị vừa.
Dòng báo cáo: decimal_as_text
money
decimal(19,2)
MySQL không có kiểu tiền tệ. Số tiền được giữ dạng số, không kèm ký hiệu tiền tệ mà locale của máy chủ đã thêm.
Dòng báo cáo: type_replaced
interval
varchar(100) với văn bản của PostgreSQL
TIME của MySQL chứa khoảng thời gian đến 838 giờ, nhưng interval có tháng và ngày; văn bản của nó giữ mọi phần.
Dòng báo cáo: type_replaced
arrays (integer[], text[]...)
mảng json
MySQL không có mảng. Mảng JSON giữ mọi phần tử và NULL, và các hàm JSON đọc được nó.
Dòng báo cáo: type_replaced
ranges, geometric types, tsvector, xml, hstore, composite and extension types
longtext với văn bản của PostgreSQL
MySQL không có kiểu tương đương, nên mỗi giá trị giữ văn bản PostgreSQL đã ghi.
Dòng báo cáo: type_replaced
json, jsonb
json
Cùng các giá trị JSON; thứ tự khóa và khoảng trắng của jsonb là do máy chủ.
timestamp
datetime(p)
timestamp không có múi giờ là thời gian theo đồng hồ, giống datetime.
timestamp with time zone
datetime(p) theo UTC
TIMESTAMP của MySQL chỉ đến năm 2038, nên thời điểm được lưu dạng datetime theo UTC, cùng một thời điểm dù bản dump ghi độ lệch nào.
Dòng báo cáo: moments_as_utc
time
time(p)
TIME của MySQL chứa mọi giờ trong ngày, kể cả 24:00:00.
infinity, -infinity, BC dates and years past 9999
NULL
MySQL lưu năm từ 1000 đến 9999, không có vô cực. Các giá trị đó trở thành NULL và báo cáo đếm số lượng.
Dòng báo cáo: date_out_of_range
NaN and Infinity in numeric, real and double precision
NULL
Số của MySQL không có NaN hay Infinity, nên các giá trị đó trở thành NULL và báo cáo đếm số lượng.
Dòng báo cáo: invalid_value_null
NOT NULL columns with values that become NULL
bỏ NOT NULL
Cột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.
Dòng báo cáo: not_null_relaxed
enum types
enum(...) với cùng các nhãn
ENUM của MySQL giữ các nhãn theo thứ tự của chúng.
uuid, inet, cidr
uuid dạng char(36), inet và cidr dạng varchar(43)
MySQL không có kiểu uuid hay kiểu địa chỉ; văn bản giữ mọi giá trị.
bytea
blob, mediumblob hoặc longblob; varbinary(3072) trong khóa
Byte vẫn là byte.
bit(n)
bit(n) đến 64, dài hơn là text
Chuỗi bit đến 64 bit là số do các bit tạo thành; chuỗi dài hơn giữ các chữ số của nó.
citext and nondeterministic collations
so sánh chính xác
Bảng dùng utf8mb4_bin để văn bản được so sánh chính xác, như PostgreSQL; cột không phân biệt hoa thường trong nguồn sẽ mất điều đó.
Dòng báo cáo: case_insensitive_collation
serial, identity
AUTO_INCREMENT, tiếp tục sau id lớn nhất
Cột đứng đầu khóa chính được đếm; bộ đếm tiếp tục từ chỗ sequence dừng lại.
a second serial or identity column in a table
số nguyên thường
MySQL đếm một cột mỗi bảng; cột khác giữ giá trị mà không có bộ đếm.
Dòng báo cáo: counter_dropped
sequences not owned by a column
không được tạo
MySQL không có sequence. Cột đếm bằng sequence trở thành AUTO_INCREMENT.
Dòng báo cáo: sequence_not_converted
generated columns
cột tính toán, STORED như trong nguồn
MySQL tính chúng theo cùng cách.
generated columns with functions MySQL lacks
một cột thường
Công thức không viết được cho MySQL để lại một cột thường và một dòng trong báo cáo.
Dòng báo cáo: generated_not_translated
defaults with functions MySQL lacks, and defaults from a sequence
không có giá trị mặc định
Giá trị mặc định không viết được cho MySQL sẽ bị bỏ và được báo cáo.
Dòng báo cáo: default_not_translated
CHECK constraints
được chuyển đổi, viết trực tiếp trong CREATE TABLE
MySQL 8.0.16 và MariaDB áp dụng chúng; MySQL 5.7 giữ chúng nhưng không kiểm tra.
CHECK constraints with functions MySQL lacks
không được tạo
Ràng buộc kiểm tra không viết được cho MySQL sẽ bị bỏ và được báo cáo.
Dòng báo cáo: check_skipped
CHECK ... NOT VALID
không được tạo
PostgreSQL chưa bao giờ kiểm tra các hàng có từ trước, nên chúng có thể vi phạm ràng buộc.
Dòng báo cáo: check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes
không được tạo
MySQL chỉ có chỉ mục b-tree, toàn văn và không gian, trên toàn bộ cột, không có WHERE.
Dòng báo cáo: index_skipped
foreign keys
khóa ngoại, nạp với FOREIGN_KEY_CHECKS=0
Các hàng nạp theo thứ tự bất kỳ, và khóa kiểm tra các hàng mới sau đó.
foreign keys to tables the dump doesn't create
không được tạo
Khóa không thể tham chiếu tới bảng không tồn tại.
Dòng báo cáo: foreign_key_skipped
partitioned tables
một bảng chứa các hàng của mọi phân vùng
Các hàng giữ nguyên; hãy phân vùng lại bảng trong MySQL nếu cần.
Dòng báo cáo: partitions_dropped
schemas
một cơ sở dữ liệu, mỗi bảng có tên schema ở đầu
Schema của MySQL là cơ sở dữ liệu, thứ mà tập lệnh nạp vào một cơ sở dữ liệu không tạo được; bảng trong public giữ tên.
Dòng báo cáo: schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and types
được liệt kê trong báo cáo
Mã của chúng viết bằng ngôn ngữ của PostgreSQL, nên được liệt kê để bạn tạo lại.
Dòng báo cáo: not_converted_objects
dumps without CREATE TABLE (--data-only)
kiểu suy ra từ giá trị
Bản dump chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị.
Dòng báo cáo: no_schema
expressions in INSERT values
NULL
Trình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.
Dòng báo cáo: expression_value
types IntoSQL doesn't know
longtext
Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.
Dòng báo cáo: unknown_type
text that isn't valid in its encoding
byte lỗi thành ký tự thay thế
Văn bản phải là utf8mb4 hợp lệ.
Dòng báo cáo: invalid_utf8_replaced
text decoded twice (ñ)
sao chép nguyên trạng
Bản dump chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.
Dòng báo cáo: mojibake_suspected
| Trong PostgreSQL | Trong MySQL | Dòng báo cáo |
|---|---|---|
| boolean | tinyint(1)BOOLEAN của MySQL là TINYINT(1): true là 1 và false là 0. | |
| varchar(n), char(n), text | varchar(n) đến 1024 ký tự, char(n) đến 255, dài hơn là textVăn bản giữ mọi ký tự dưới dạng utf8mb4. Cột trong khóa tối đa là varchar(768), độ dài lớn nhất một khóa chứa được, và văn bản có giá trị mặc định cũng vậy, vì MySQL 5.7 chỉ cho varchar có giá trị mặc định. | |
| numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds | varchardecimal của MySQL chứa 65 chữ số với 30 chữ số thập phân. Số rộng hơn được giữ dạng văn bản để mọi chữ số vẫn chính xác; numeric không có độ chính xác là decimal(65,30) khi giá trị vừa. | decimal_as_text |
| money | decimal(19,2)MySQL không có kiểu tiền tệ. Số tiền được giữ dạng số, không kèm ký hiệu tiền tệ mà locale của máy chủ đã thêm. | type_replaced |
| interval | varchar(100) với văn bản của PostgreSQLTIME của MySQL chứa khoảng thời gian đến 838 giờ, nhưng interval có tháng và ngày; văn bản của nó giữ mọi phần. | type_replaced |
| arrays (integer[], text[]...) | mảng jsonMySQL không có mảng. Mảng JSON giữ mọi phần tử và NULL, và các hàm JSON đọc được nó. | type_replaced |
| ranges, geometric types, tsvector, xml, hstore, composite and extension types | longtext với văn bản của PostgreSQLMySQL không có kiểu tương đương, nên mỗi giá trị giữ văn bản PostgreSQL đã ghi. | type_replaced |
| json, jsonb | jsonCùng các giá trị JSON; thứ tự khóa và khoảng trắng của jsonb là do máy chủ. | |
| timestamp | datetime(p)timestamp không có múi giờ là thời gian theo đồng hồ, giống datetime. | |
| timestamp with time zone | datetime(p) theo UTCTIMESTAMP của MySQL chỉ đến năm 2038, nên thời điểm được lưu dạng datetime theo UTC, cùng một thời điểm dù bản dump ghi độ lệch nào. | moments_as_utc |
| time | time(p)TIME của MySQL chứa mọi giờ trong ngày, kể cả 24:00:00. | |
| infinity, -infinity, BC dates and years past 9999 | NULLMySQL lưu năm từ 1000 đến 9999, không có vô cực. Các giá trị đó trở thành NULL và báo cáo đếm số lượng. | date_out_of_range |
| NaN and Infinity in numeric, real and double precision | NULLSố của MySQL không có NaN hay Infinity, nên các giá trị đó trở thành NULL và báo cáo đếm số lượng. | invalid_value_null |
| NOT NULL columns with values that become NULL | bỏ NOT NULLCột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng. | not_null_relaxed |
| enum types | enum(...) với cùng các nhãnENUM của MySQL giữ các nhãn theo thứ tự của chúng. | |
| uuid, inet, cidr | uuid dạng char(36), inet và cidr dạng varchar(43)MySQL không có kiểu uuid hay kiểu địa chỉ; văn bản giữ mọi giá trị. | |
| bytea | blob, mediumblob hoặc longblob; varbinary(3072) trong khóaByte vẫn là byte. | |
| bit(n) | bit(n) đến 64, dài hơn là textChuỗi bit đến 64 bit là số do các bit tạo thành; chuỗi dài hơn giữ các chữ số của nó. | |
| citext and nondeterministic collations | so sánh chính xácBảng dùng utf8mb4_bin để văn bản được so sánh chính xác, như PostgreSQL; cột không phân biệt hoa thường trong nguồn sẽ mất điều đó. | case_insensitive_collation |
| serial, identity | AUTO_INCREMENT, tiếp tục sau id lớn nhấtCột đứng đầu khóa chính được đếm; bộ đếm tiếp tục từ chỗ sequence dừng lại. | |
| a second serial or identity column in a table | số nguyên thườngMySQL đếm một cột mỗi bảng; cột khác giữ giá trị mà không có bộ đếm. | counter_dropped |
| sequences not owned by a column | không được tạoMySQL không có sequence. Cột đếm bằng sequence trở thành AUTO_INCREMENT. | sequence_not_converted |
| generated columns | cột tính toán, STORED như trong nguồnMySQL tính chúng theo cùng cách. | |
| generated columns with functions MySQL lacks | một cột thườngCông thức không viết được cho MySQL để lại một cột thường và một dòng trong báo cáo. | generated_not_translated |
| defaults with functions MySQL lacks, and defaults from a sequence | không có giá trị mặc địnhGiá trị mặc định không viết được cho MySQL sẽ bị bỏ và được báo cáo. | default_not_translated |
| CHECK constraints | được chuyển đổi, viết trực tiếp trong CREATE TABLEMySQL 8.0.16 và MariaDB áp dụng chúng; MySQL 5.7 giữ chúng nhưng không kiểm tra. | |
| CHECK constraints with functions MySQL lacks | không được tạoRàng buộc kiểm tra không viết được cho MySQL sẽ bị bỏ và được báo cáo. | check_skipped |
| CHECK ... NOT VALID | không được tạoPostgreSQL chưa bao giờ kiểm tra các hàng có từ trước, nên chúng có thể vi phạm ràng buộc. | check_not_valid |
| gin, gist, brin and hash indexes, partial and expression indexes | không được tạoMySQL chỉ có chỉ mục b-tree, toàn văn và không gian, trên toàn bộ cột, không có WHERE. | index_skipped |
| foreign keys | khóa ngoại, nạp với FOREIGN_KEY_CHECKS=0Các hàng nạp theo thứ tự bất kỳ, và khóa kiểm tra các hàng mới sau đó. | |
| foreign keys to tables the dump doesn't create | không được tạoKhóa không thể tham chiếu tới bảng không tồn tại. | foreign_key_skipped |
| partitioned tables | một bảng chứa các hàng của mọi phân vùngCác hàng giữ nguyên; hãy phân vùng lại bảng trong MySQL nếu cần. | partitions_dropped |
| schemas | một cơ sở dữ liệu, mỗi bảng có tên schema ở đầuSchema của MySQL là cơ sở dữ liệu, thứ mà tập lệnh nạp vào một cơ sở dữ liệu không tạo được; bảng trong public giữ tên. | schemas_merged |
| views, functions, procedures, triggers, rules, policies, extensions and types | được liệt kê trong báo cáoMã của chúng viết bằng ngôn ngữ của PostgreSQL, nên được liệt kê để bạn tạo lại. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | kiểu suy ra từ giá trịBản dump chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị. | no_schema |
| expressions in INSERT values | NULLTrình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng. | expression_value |
| types IntoSQL doesn't know | longtextVăn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp. | unknown_type |
| text that isn't valid in its encoding | byte lỗi thành ký tự thay thếVăn bản phải là utf8mb4 hợp lệ. | invalid_utf8_replaced |
| text decoded twice (ñ) | sao chép nguyên trạngBản dump chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng. | mojibake_suspected |
Nạp tập lệnh vào MySQL
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.
mysql --default-character-set=utf8mb4 mydb < postgresql.mysql.sqlKhóa ngoại được tạo đúng như bản dump khai báo, với FOREIGN_KEY_CHECKS=0 trong khi nạp các hàng, nên hàng trỏ tới hàng không tồn tại không làm dừng quá trình nạp.
Với bản dump lớn, hãy chạy client trên cùng máy với máy chủ, và tăng max_allowed_packet nếu một hàng rất lớn.
IntoSQL Pro nạp tệp thẳng vào MySQL 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
Khung nhìn, khung nhìn cụ thể hóa, hàm, thủ tục, trình kích hoạt, quy tắc, chính sách bảo mật cấp hàng, tiện ích mở rộng và kiểu được viết bằng ngôn ngữ riêng của PostgreSQL. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho MySQL.
Câu hỏi về PostgreSQL sang MySQL
Chưa có câu trả lời ở đây? Hãy viết cho chúng tôi từ trang liên hệ, sẽ có người trả lời. Trang liên hệ
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ó, cho một cột mỗi bảng: cột serial hoặc identity đứng đầu khóa chính trở thành AUTO_INCREMENT và tiếp tục sau id lớn nhất. MySQL đếm một cột mỗi bảng, nên cột khác giữ giá trị mà không có bộ đếm, và báo cáo ghi rõ điều đó.
Mảng, enum và các kiểu PostgreSQL khác sẽ ra sao?
Mảng thành mảng JSON, boolean thành tinyint(1), enum thành ENUM với cùng nhãn, và money thành decimal. Range, kiểu hình học, hstore và kiểu composite giữ văn bản của PostgreSQL, 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, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.
Tập lệnh nạp được trên những phiên bản MySQL nào?
MySQL 5.7 trở lên. Mọi bản dump thử nghiệm đều nạp được trên 5.7 và 9, và dừng ở lỗi đầu tiên nếu có sự cố.