2008-08-20 50 views
26

Chúng tôi hiện đang sử dụng MySQL cho một sản phẩm mà chúng tôi đang xây dựng và muốn chuyển sang PostgreSQL càng sớm càng tốt, chủ yếu vì lý do cấp phép.Di chuyển từ MySQL sang PostgreSQL

Có ai khác đã thực hiện việc di chuyển này không? Cơ sở dữ liệu của chúng tôi là mạch máu của ứng dụng và cuối cùng sẽ lưu trữ dữ liệu TB, vì vậy tôi muốn nghe về trải nghiệm cải thiện/giảm hiệu suất, các rào cản lớn trong việc chuyển đổi các thủ tục SQL và được lưu trữ, v.v. để làm rõ những người đã hỏi tại sao chúng tôi không thích cấp phép của MySQL. Chúng tôi đang phát triển một sản phẩm thương mại (hiện tại) phụ thuộc vào MySQL như một cơ sở dữ liệu back-end. Giấy phép của họ nói rằng chúng tôi cần phải trả cho họ một tỷ lệ phần trăm của giá niêm yết của chúng tôi cho mỗi lần cài đặt, và không phải là một khoản phí cố định. Khi khởi nghiệp, điều này ít hấp dẫn hơn.

+0

Có một số bài viết kỹ thuật tốt về chủ đề này tại đây: http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL – user13550

+0

Tái tạo có thể là vấn đề bạn. MySQL hỗ trợ nó ra khỏi hộp. –

Trả lời

27

Steve, tôi phải di chuyển ứng dụng cũ của mình theo cách đó, đó là PgSQL-> MySQL. Tôi phải nói rằng, bạn nên xem xét cho mình may mắn ;-) gotchas thường gặp là:

  • SQL thực sự là khá gần với tiêu chuẩn ngôn ngữ, do đó bạn có thể bị ảnh hưởng từ phương ngữ MySQL của bạn đã biết
  • MySQL lặng lẽ truncates varchars rằng vượt quá chiều dài tối đa, trong khi Thạc phàn nàn - workaround nhanh chóng là có các cột như 'text' thay vì 'varchar' và dùng triggers để cắt đường dài
  • dấu ngoặc kép được sử dụng thay vì dấu nháy ngược
  • lĩnh vực boolean được so sánh sử dụng Các toán tử IS và IS KHÔNG, tuy nhiên INT tương thích với MySQL (1) với = và <> vẫn còn có thể
  • có được không REPLACE, sử dụng DELETE/INSERT kết hợp
  • Thạc là khá nghiêm ngặt về việc thi hành các phím nước ngoài liêm chính, vì vậy đừng quên sử dụng ON DELETE CASCADE trên tài liệu tham khảo
  • nếu bạn sử dụng PHP với PDO, hãy nhớ chuyển tham số tới phương thức lastInsertId() - nó phải là tên trình tự, được tạo theo cách này: [tablename] _ [primarykeyname] _seq

Tôi hy vọng sẽ giúp ít nhất một chút. Có rất nhiều niềm vui chơi với Postgres!

13

Tôi đã thực hiện một chuyển đổi tương tự, nhưng vì các lý do khác nhau. Đó là bởi vì chúng tôi cần hỗ trợ ACID tốt hơn và khả năng để người dùng web thấy cùng một dữ liệu họ có thể thông qua các công cụ DB khác (một ID cho cả hai).

Dưới đây là những điều mà cắn chúng tôi:

  1. MySQL không thi hành những hạn chế như nghiêm như PostgreSQL.
  2. Có các quy trình xử lý ngày khác nhau. Đây sẽ cần phải được chuyển đổi theo cách thủ công.
  3. Bất kỳ mã nào không mong đợi ACID việc tuân thủ có thể là một vấn đề.

Điều đó nói rằng, khi đã được đặt và thử nghiệm, nó đẹp hơn rất nhiều. Với khóa chính xác vì lý do an toàn và sử dụng đồng thời nặng, PostgreSQL hoạt động tốt hơn so với MySQL. Về những thứ không cần khóa (chỉ đọc) hiệu năng không hoàn toàn tốt, nhưng nó vẫn nhanh hơn card mạng, vì vậy nó không phải là vấn đề.

Mẹo:

  • Các kịch bản tự động trong thư mục contrib là một điểm khởi đầu tốt cho chuyển đổi của bạn, nhưng sẽ cần được chạm vào một chút thường.
  • Tôi rất muốn khuyên bạn sử dụng cách ly có thể tuần tự cấp làm mặc định.
  • Công cụ pg_autodoc là tốt để thực sự xem cấu trúc dữ liệu của bạn và giúp tìm mọi mối quan hệ bạn quên xác định và thực thi.
3

Chúng tôi đã chuyển từ MySQL3 sang PostgreSQL 8.2 rồi 8.3. PostgreSQL có cơ sở của SQL và nhiều hơn nữa vì vậy nếu MYSQL của bạn không sử dụng công cụ MySQL ưa thích, bạn sẽ được OK.

Từ kinh nghiệm của tôi, cơ sở dữ liệu MySQL của chúng tôi (phiên bản 3) không có khóa ngoại ... PostgreSQL cho phép bạn có chúng, vì vậy chúng tôi phải thay đổi ... và đó là một điều tốt và chúng tôi đã tìm thấy một số lỗi .

Một thứ khác mà chúng tôi đã phải thay đổi là mã hóa (C#) kết nối đó là không giống nhau trong MySQL. MySQL là một trong những ổn định hơn so với một PostgreSQL. Chúng tôi vẫn gặp một số vấn đề với PostgreSQL.

+10

"Postgresql", "PostGreSql", "PostGresql" => "PostgreSQL" ;-) –

+6

Thở dài. Chín upvotes cho bình luận, nhưng không ai đi và thực hiện các chỉnh sửa. Được trao quyền cho người dùng StackOverflow công bằng! – mlissner

Các vấn đề liên quan