Làm cách nào để chuyển đổi cơ sở dữ liệu MySQL sang PostgreSQL?


20

Có công cụ dòng lệnh nào để chuyển đổi cơ sở dữ liệu MySQL sang PostgreSQL không? Tôi cũng muốn biết liệu có cách nào để chuyển đổi cơ sở dữ liệu bằng mysqldumplệnh thông thường không .



4
Mỗi khi nhìn thấy điều này, tôi lại khóc những giọt nước mắt của niềm vui.
rfusca


Đây dễ dàng là một trong những câu hỏi hữu ích nhất trên toàn bộ trang web này.
Evan Carroll

Câu trả lời:


13

bạn đã thử chưa

mysqldump --compatible=postgresql dbname > export.sql

sau đó làm điều này để thoát dấu ngoặc kép

sed "s/\\\'/\'\'/g" export.sql > export1.sql

có thể cần thêm một số xoa bóp vì vậy hãy nhìn vào tài liệu mysqldump chặt chẽ hơn.


2
Tôi đã thử phương pháp do bạn cung cấp nhưng nó đã bị lỗi khi khôi phục trong postgresql
Mughil

2
@Mughil lỗi là gì?
Janus Troelsen

4
5 năm và chưa có ai cố định mysqldump. syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
Theo dev.mysql.com/doc/refman/8.0/en/ , giá trị được phép duy nhất cho --compatibleansi
phunehehe

7

Dưới đây là một vài công cụ nguồn mở, có thể rất hữu ích:

FromMySqlToPostgreSql là một công cụ tiếp cận tính năng và rất dễ sử dụng.
Nó ánh xạ các kiểu dữ liệu, di chuyển các ràng buộc, chỉ mục, PK và FK chính xác như trong db db của bạn.
Dưới mui xe, nó sử dụng PostgreSQL COPY, vì vậy việc truyền dữ liệu rất nhanh.
FromMySqlToPostgreSql được viết bằng PHP (> = 5.4).

pgloader   là một công cụ tải dữ liệu cho PostgreSQL, sử dụng lệnh COPY. Ưu điểm chính của nó so với việc chỉ sử dụng

COPY
hoặc là
\copy
và sử dụng Trình bao bọc dữ liệu nước ngoài, là hành vi giao dịch của nó, trong đó pgloader sẽ giữ một tệp dữ liệu bị từ chối riêng biệt, nhưng tiếp tục cố gắng sao chép dữ liệu tốt trong cơ sở dữ liệu của bạn. Hành vi PostgreSQL mặc định là giao dịch, có nghĩa là bất kỳ dòng lỗi nào trong dữ liệu đầu vào (tệp hoặc cơ sở dữ liệu từ xa) sẽ dừng toàn bộ tải hàng loạt cho bảng. pgloader cũng thực hiện định dạng lại dữ liệu, một ví dụ điển hình cho việc chuyển đổi các dấu thời gian của MySQL 0000-00-00 và 0000-00-00 00:00:00 sang PostgreQuery
NULL
giá trị (vì lịch của chúng tôi không bao giờ có năm không).
pgloader được viết bằng LISP và được phân phối dưới dạng mã nguồn, vì vậy bạn cần biên dịch nó trước khi sử dụng.

Hy vọng nó sẽ giúp bạn ...


1
pgloader thậm chí là công cụ di chuyển được đề xuất trên các tài liệu postgre, vì vậy tôi muốn nói rằng đó là sự lựa chọn tốt nhất. Tôi đã sử dụng nó với thành công trên một DB khá nhỏ với hơn 50 bảng, hoạt động như một bùa mê.
Capaj

3

Thực sự có một công cụ di chuyển miễn phí khá dễ sử dụng, được phát triển bởi chính EnterpriseDB. Nó có thể được cài đặt thông qua StackBuilder: Migration Toolkit


3

Gần đây tôi đã sử dụng một công cụ không miễn phí từ DBConvert để chuyển đổi cơ sở dữ liệu truy cập sang postgres và thấy nó cũng đáng đồng tiền so với thời gian tôi lãng phí khi cố gắng làm nó miễn phí. Việc bán một công cụ tương tự cho MySQL <-> postgres mà tôi chưa sử dụng, nhưng có thể đáng để xem xét trừ khi bạn chỉ quan tâm đến các công cụ dòng lệnh.

Trong trường hợp bạn đang tự hỏi tôi không liên kết với họ theo bất kỳ cách nào :-)


3

Bạn có thể sử dụng Thuật sĩ di chuyển EnterpriseDB chẳng hạn.

Nó có thể biểu thị di chuyển OracleDB. Nhưng đối với Mysql, nó có một số hạn chế, ví dụ, nó không hỗ trợ các khung nhìn, kích hoạt, các thủ tục được lưu trữ.

Để biết thêm, xem Bộ công cụ di chuyển EDB . Không chắc chắn, nhưng có thể di chuyển mysql-> oracle-> postgresql lưu các thủ tục được lưu trữ của bạn (trong trường hợp chúng tồn tại).

Grep this: Công cụ di chuyển cơ sở dữ liệu và SQL


1

Đây chỉ là để thêm vào các câu trả lời hiện có, giúp tôi tìm ra giải pháp này. Tôi đã sử dụng FromMySqlToPostgreSql . Tất cả những gì bạn cần làm là tải xuống và trích xuất FromMySqlToPostgreSql , tạo một bản sao của tệp cấu hình mẫu, đặt các giá trị kết nối db trong đó và chạy tệp chỉ mục bằng lệnh sau:

php index.php config.xml

Đơn giản mà hiệu quả!


Bạn có thể chỉnh sửa bài viết của mình với một liên kết đến công cụ này không?
dezso

Xin lỗi, tôi đã quên điều đó. Thêm!
toing_toing

Ah, điều này thật buồn cười. Bạn có nhận ra rằng tác giả của công cụ cũng đã đăng một câu trả lời không? ;) Bây giờ tôi đã làm.
dezso

Ta tự hào! Anh ấy đã không mô tả nhiều về plugin tuyệt vời của riêng mình mặc dù.
toing_toing

0

Có một công cụ mã nguồn mở cung cấp các chức năng để chuyển đổi một db MySQL thành các chỉ mục, fks và dữ liệu của Postgresql.

https://github.com/ggarri/mysql2psql

Công cụ này cũng cho phép xác định các thay đổi lược đồ để bạn có thể thực hiện một số nâng cấp cho lược đồ hiện tại của mình trong thời gian chạy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.