Chuyển đến nội dung
Trang chủ IntoSQL

Chuyển PostgreSQL sang MariaDB

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 MariaDB với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị MariaDB 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.

Tệp của bạn
sqlshop_2024_postgres.sqlTệp mẫu, 6,2 kB
Cơ sở dữ liệu của bạn

Đã chuyển đổi 18 hàng, 3 bản sửa, không hàng nào bị từ chối

Hiển thị

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
    idint not null
    nametext not null
    emailvarchar(768) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    tagsjson not null
    signed_update
    created_atdatetime(6) not null
  • orders10 hàng1
    10 cột
    idint not null
    customer_idint not null
    statusenum('pending','paid','shipped','cancelled') not null
    totaldecimal(10,2) not null
    itemssmallint not null
    ordered_atdatetime(6) not null
    shipped_atdatetime(6)
    notetext
    detailsjson
    deliveryvarchar(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 MariaDB.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: mariadb --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

  1. "created_at" của customers chứa thời điểm kèm múi giờ; MariaDB 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).
  2. "tags" của customers là text[], kiểu MariaDB không có, nên là json với cùng giá trị.
  3. "delivery" của orders là interval, kiểu MariaDB 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 MariaDB.
  • Giá trị mặc định của "tags" trong customers không viết được cho MariaDB (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 MariaDB (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à MariaDB không lưu được, như infinity, nên chúng là NULL. MariaDB 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 MariaDB

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

  • numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds

    varchar

    decimal của MariaDB 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)

    MariaDB 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 MariaDB 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

    MariaDB 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

    MariaDB 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 MariaDB 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 MariaDB chứa mọi giờ trong ngày, kể cả 24:00:00.

  • infinity, -infinity, BC dates and years past 9999

    NULL

    MariaDB 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 MariaDB 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 MariaDB giữ các nhãn theo thứ tự của chúng.

  • uuid, inet, cidr

    uuid dạng uuid, inet và cidr dạng varchar(43)

    MariaDB có kiểu uuid; địa chỉ giữ văn bản, kể cả mặt nạ.

  • 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

    MariaDB đế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

    CREATE SEQUENCE, ở giá trị sẽ cấp tiếp theo

    Sequence của MariaDB hoạt động theo cùng cách.

  • generated columns

    cột tính toán, STORED như trong nguồn

    MariaDB tính chúng theo cùng cách.

  • generated columns with functions MariaDB lacks

    một cột thường

    Công thức không viết được cho MariaDB để 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 MariaDB 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 MariaDB 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 MariaDB lacks

    không được tạo

    Ràng buộc kiểm tra không viết được cho MariaDB 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

    MariaDB 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 MariaDB 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 MariaDB 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 PostgreSQLTrong MariaDBDòng báo cáo
booleantinyint(1)BOOLEAN của MariaDB là TINYINT(1): true là 1 và false là 0.
varchar(n), char(n), textvarchar(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.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holdsvarchardecimal của MariaDB 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
moneydecimal(19,2)MariaDB 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
intervalvarchar(100) với văn bản của PostgreSQLTIME của MariaDB 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 jsonMariaDB 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 typeslongtext với văn bản của PostgreSQLMariaDB không có kiểu tương đương, nên mỗi giá trị giữ văn bản PostgreSQL đã ghi.type_replaced
json, jsonbjsonCùng các giá trị JSON; thứ tự khóa và khoảng trắng của jsonb là do máy chủ.
timestampdatetime(p)timestamp không có múi giờ là thời gian theo đồng hồ, giống datetime.
timestamp with time zonedatetime(p) theo UTCTIMESTAMP của MariaDB 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
timetime(p)TIME của MariaDB chứa mọi giờ trong ngày, kể cả 24:00:00.
infinity, -infinity, BC dates and years past 9999NULLMariaDB 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 precisionNULLSố của MariaDB 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 NULLbỏ 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 typesenum(...) với cùng các nhãnENUM của MariaDB giữ các nhãn theo thứ tự của chúng.
uuid, inet, cidruuid dạng uuid, inet và cidr dạng varchar(43)MariaDB có kiểu uuid; địa chỉ giữ văn bản, kể cả mặt nạ.
byteablob, 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 collationsso 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, identityAUTO_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 tablesố nguyên thườngMariaDB đế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 columnCREATE SEQUENCE, ở giá trị sẽ cấp tiếp theoSequence của MariaDB hoạt động theo cùng cách.
generated columnscột tính toán, STORED như trong nguồnMariaDB tính chúng theo cùng cách.
generated columns with functions MariaDB lacksmột cột thườngCông thức không viết được cho MariaDB để lại một cột thường và một dòng trong báo cáo.generated_not_translated
defaults with functions MariaDB lacks, and defaults from a sequencekhông có giá trị mặc địnhGiá trị mặc định không viết được cho MariaDB 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 MariaDB lackskhông được tạoRàng buộc kiểm tra không viết được cho MariaDB sẽ bị bỏ và được báo cáo.check_skipped
CHECK ... NOT VALIDkhô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 indexeskhông được tạoMariaDB 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 keyskhó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 createkhô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 tablesmộ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 MariaDB nếu cần.partitions_dropped
schemasmột cơ sở dữ liệu, mỗi bảng có tên schema ở đầuSchema của MariaDB 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 valuesNULLTrì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 knowlongtextVă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 encodingbyte 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 MariaDB

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.

mariadb --default-character-set=utf8mb4 mydb < postgresql.mariadb.sql

Khó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, như mysqldump.

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

Câu hỏi về PostgreSQL sang MariaDB

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. Sequence không thuộc cột nào thành sequence MariaDB ở giá trị đã đạt tới.

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, uuid thành UUID, 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 MariaDB nào?

MariaDB 10.11 trở lên. Mọi bản dump thử nghiệm đều nạp được trên 10.11 và 11.4, và dừng ở lỗi đầu tiên nếu có sự cố.