Làm thế nào để chuyển đổi mysql sang postgresql? [đóng cửa]


14

Tôi đang tuyệt vọng tìm kiếm một công cụ chuyển đổi để chuyển đổi một cơ sở dữ liệu mysql lớn sang postgresql. Tôi cần công cụ / tập lệnh là:

  • Miễn phí
  • Hoạt động trong Linux
  • Sử dụng đơn giản và không có lỗi
  • Bạn thực sự đã thử và xác nhận rằng nó hoạt động
  • Tốt hơn là, không được viết bằng Java hoặc Ruby

Tôi đã thử các công cụ khác nhau được liệt kê ở đây , nhưng không có công cụ nào phù hợp với tôi.

Cảm ơn bạn trước.


Tôi không phải là chuyên gia PostgreSQL, vẫn đang tự học. Tôi xóa câu trả lời của tôi. Tuy nhiên, có một câu hỏi khác về việc sử dụng mysqldump với postgresql được đăng bởi người khác: dba.stackexchange.com/q/9792/877 . Hy vọng nó giúp !!!
RolandoMySQLDBA

1
Có gì sai với các công cụ được viết bằng Java? Và nó có thể hữu ích nếu bạn mô tả chính xác những gì " không hoạt động " với tất cả chúng.
a_horse_with_no_name

Câu trả lời:


7

Di chuyển giữa hai DBMS rất khác nhau đòi hỏi nhiều hơn là chỉ di chuyển dữ liệu. Nhưng di chuyển dữ liệu thường là phần dễ nhất.

Cách mà tôi đã thử, miễn phí và tôi có thể xác nhận rằng nó hoạt động:

  • tạo một lược đồ mysql chỉ đổ
  • Điều chỉnh SQL bằng trình soạn thảo văn bản và nhiều tìm kiếm và thay thế
  • chạy SQL đã chuyển đổi trong Postgres
  • Tạo kết xuất văn bản đơn giản từ MySQL (ví dụ CSV hoặc một số định dạng được phân tách khác)
  • nhập dữ liệu bằng lệnh COPY của PostgreSQL

Nhập dữ liệu thực sự có thể khó khăn nếu bạn dựa vào hành vi của MySQL để chấp nhận dữ liệu bất hợp pháp (như ngày 31 tháng 2)

Tôi đoán là, điều này sẽ nhanh hơn việc tìm kiếm một công cụ, đánh giá một loạt chúng và sau đó cố gắng hiểu công cụ mà bạn đã chọn. Nhưng nó phụ thuộc vào loại "lớn" mà bạn đang đề cập đến. Nếu lớn là vài trăm bảng thì điều này có thể không khả thi. Nếu lớn chỉ đề cập đến số lượng hàng, thì đây có lẽ là cách nhanh nhất để làm điều đó.

Có một số công cụ có thể kết xuất một lược đồ cơ sở dữ liệu theo định dạng DBMS độc lập (XML), như Liquibase , SchemaSpy hoặc WbSchemaReport . Với Liquibase có lẽ là dễ sử dụng nhất. Những cái khác sẽ yêu cầu một số thao tác viết / mở rộng XSLT thủ công để chuyển đổi XML được tạo.

Nếu bạn đang sử dụng trình kích hoạt và quy trình được lưu trữ trong MySQL, tôi không tin sẽ có bất kỳ công cụ tự động nào có thể dịch chúng mà không yêu cầu sửa lỗi thủ công chính sau đó - và sau đó các quy trình được tạo có thể sẽ không sử dụng bất kỳ tính năng nâng cao nào của DBMS đích .


6

Phải làm điều đó gần đây và vì sẽ mất quá nhiều thời gian để tìm kiếm một công cụ và có thể làm mọi thứ với nó, tôi đã làm nó bằng tay với vim và thay thế-foo

  • thay thế INT NOT NULL AUTO_INCREMENT(hoặc bất cứ thứ gì như thế này) bằngSERIAL
  • thay đổi everythig chuỗi liên quan vào một TEXT(có sự khác biệt tốc độ trong việc sử dụng TEXT, VARCHARhoặc tương tự)
  • thoát khỏi những f *** ing backticks '
  • không có công cụ lưu trữ trong Postgres, vì vậy hãy loại bỏ ENGINE InnoDB(hoặc bất cứ điều gì)
  • tẩy UNSIGNED
  • mỗi trường BLOB là BYTEA
  • chuỗi sử dụng dấu ngoặc đơn 'và không có gì khác
  • hãy cẩn thận nếu bạn sử dụng nối chuỗi ở đâu đó, bắt đầu từ 9.1, Postgres hỗ trợ CONCATnhư một dự phòng cho nối chuỗi không chuẩn, trước khi 9.1 được thực hiện bằng cách sử dụng 'string' || ' string'
  • viết lại bất kỳ mã thủ tục ...
  • chăm sóc các tên được dành riêng (ví dụ: bảng, tên, ...) cũng như tên viết hoa. Họ cần phải được trích dẫn gấp đôi"
  • Lập chỉ mục nên khá giống nhau vì cú pháp không thay đổi
  • Đối với tất cả mọi thứ mà tôi đã quên, hãy xem wikibooks về chủ đề này

Mỗi viên đạn nên được thực hiện với một lần thay thế duy nhất.

Tôi xuất khẩu các lược đồ và dữ liệu seperatly . Hãy chắc chắn rằng bạn sử dụng INSERTs thay vì COPY. Nếu không có công cụ fance nào xảy ra, dữ liệu sẽ yêu cầu (hầu như) không dọn dẹp. Hãy chắc chắn rằng tất cả mọi thứ là trên UTF-8. Với 2 tệp riêng biệt, lược đồ trở nên dễ quản lý hơn và bạn không có tệp 1GB để chỉnh sửa.

Khi tải lược đồ, bạn nhận được thông tin khá chi tiết có lỗi, do đó việc gỡ lỗi sẽ khá đơn giản.


Xin chào, làm thế nào để chuyển đổi dữ liệu trường BLOB của MySQL sang BYTEA của PostgreSQL? Tôi đã tìm thấy nếu tôi kết xuất dữ liệu của Mysql dưới dạng chèn sql, tôi không thể tải dữ liệu trong PostgreQuery.
franc

1

Tôi đang ném nó ra khỏi đó, chưa bao giờ thử nó, nhưng Tungesten Replicator có thể làm những gì bạn muốn. Đây chủ yếu là một công cụ sao chép, nhưng tôi nghĩ nó có thể có quá trình bootstrapping có thể giúp bạn ít nhất là với phần dữ liệu.

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.