2010-04-10 26 views
6

Hầu hết các kinh nghiệm của tôi với Django cho đến nay đã được với MySQL và mysqldb. Đối với một ứng dụng mới tôi đang viết, tôi đang nhúng ngón chân vào nước PostgreSQL, bây giờ tôi có seen the light.Người dùng Django nên biết gì khi di chuyển từ MySQL sang PostgreSQL?

Trong khi viết tập lệnh nhập dữ liệu, tôi tình cờ gặp sự cố với hành vi tự động mặc định. Tôi đoán có những "gotchas" khác có thể cắt lên. Tôi nên theo dõi điều gì khác?

+0

Cảm ơn bạn đã hỏi điều này - Tôi đang cân nhắc chuyển sang PostgreSQL và cũng sẽ gặp phải bất kỳ vấn đề nào trong số này, nhưng không biết chúng là gì. –

Trả lời

11

Có sự không nhất quán giữa tính năng tự động của Django và chế độ cam kết mặc định của PostgreSQL.

Hết hộp, Django sử dụng chế độ mặc định PostgreSQL "đã đọc cam kết" kết hợp tất cả các hoạt động thành một giao dịch duy nhất kết thúc khi con trỏ db nằm ngoài phạm vi. Vấn đề phát sinh khi một lỗi xảy ra trong chuỗi hoạt động đó. Postgres hy vọng bạn sẽ phát hành một rollback trước khi tiếp tục, và nếu không, psycopg2 sẽ ném InternalError vào lần tới khi bạn sử dụng kết nối. Nếu bạn đang dựa vào autocommit Django (mặc định), có thể bạn sẽ không quay trở lại đúng cách.

May mắn thay, psycopg2 đã hỗ trợ cho một chế độ hoạt động khác được gọi là "tự động", trong đó nó không thiết lập các giao dịch này. Đối với những người đến từ MySQL (hoặc cố gắng hỗ trợ cả hai), điều này mang lại sự tỉnh táo cho thế giới. Trong 1.1 họ thêm hỗ trợ để lộ nó. Thêm những điều sau đây để thiết lập của bạn (cần phải được thay đổi cho 1.2 syntax nếu bạn đang ở trên thân cây)

DATABASE_OPTIONS = { 
    "autocommit": True, 
} 

Các cuộc thảo luận cho Django vé #3460 đưa ra các chi tiết gritty.


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