2011-02-11 35 views
11

Có ai đã làm điều này không? Nó là một quá trình dễ dàng? Chúng tôi đang nghĩ đến việc chuyển đổi cho các giao dịch và vì mysql có vẻ là "thèm ra" gần đây.Làm thế nào tôi có thể dễ dàng chuyển đổi một ứng dụng Django từ mySQL sang PostgreSQL?

+0

1) MySql không giao dịch hỗ trợ (InnoDB) 2) Điều gì làm cho bạn nghĩ rằng MySql là "crapping ra" thời gian gần đây? –

+0

Vì lý do tại sao chúng ta sẽ bắt đầu nhận các lỗi này: OperationalError: (1205, 'Waitout timeout outout; try restarting transaction') Ngoài ra, sử dụng South với Django đôi khi làm tổn thương mà không có giao dịch thực. –

+1

MySQL không hỗ trợ các giao dịch lược đồ - có thể gây ra một cơn đau đầu lớn khi di chuyển – yarbelk

Trả lời

1

Tôi chưa bao giờ làm điều đó một cách cá nhân, nhưng có vẻ như kết hợp các tùy chọn dumpdataloaddata của manage.py sẽ có thể giải quyết vấn đề của bạn khá dễ dàng. Tức là, trừ khi bạn có rất nhiều thứ cụ thể về cơ sở dữ liệu sống bên ngoài ORM, chẳng hạn như các thủ tục được lưu trữ.

+0

hoạt động, nhưng đôi khi cần cắt bớt tất cả các bảng được tạo bởi syncdb – Alexey

+0

dữ liệu đổ tải toàn bộ tập dữ liệu vào ghi nhớ trước khi tuần tự hóa - đây là một vấn đề cho một tập dữ liệu lớn. http://www.ofbrooklyn.com/2010/07/18/migrating-django-mysql-postgresql-easy-way/ cho biết cách chunk quá trình này để tránh làm rơi máy chủ của bạn. – yarbelk

0

Tôi cũng chưa làm điều đó. Lần đầu tiên tôi thực hiện theo số migration guide, there is a MySql section này sẽ xử lý tất cả dữ liệu của bạn. Sau đó, django chỉ cần chuyển mysql thành postgre trong cài đặt. Tôi nghĩ điều đó sẽ ổn thôi.

Tôi tìm thấy một câu hỏi khác trên stackoverflow sẽ giúp chuyển đổi mysql thành postgre here.

0
  1. python manage.py dump.data >> data.json

  2. Tạo cơ sở dữ liệu và người dùng trong postrgesql

  3. Đặt cơ sở dữ liệu vừa tạo của bạn trong postrgesql làm cơ sở dữ liệu mặc định trong cài đặt django hoặc sử dụng thông số --datab ase = your_postrgesql_database các bước tiếp theo
  4. Chạy syncdb để tạo bảng.

    python syncdb [--database = your_postrgesql_database] --noinput

  5. Tạo bãi không có dữ liệu, thả tất cả các bảng và bãi tải. Hoặc cắt bớt tất cả các bảng (bảng django_content_type whith dữ liệu mà có thể không bằng với dữ liệu cũ của bạn - đó là cách để nhiều lỗi). Ở bước này, chúng ta cần các bảng trống trong postgresql-db.

  6. Khi bạn có bảng trống trong postgresql-DB chỉ tải dữ liệu của bạn:

    python manage.py LoadData data.json

Và được vui vẻ!

0

Tôi đã viết một lệnh quản lý Django rằng bản một cơ sở dữ liệu khác: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d

Bạn cần phải thêm cả cơ sở dữ liệu trong các thiết lập và sử dụng lệnh này:

./manage.py copy_db from_database to_database app1 app2 app3 --delete --ignore-errors 

gì thú vị về lệnh này là rằng nó đệ quy sao chép các đối tượng phụ thuộc.Ví dụ: nếu mô hình có 2 khóa ngoại và hai mối quan hệ Nhiều-nhiều, trước tiên nó sẽ sao chép các đối tượng khác để đảm bảo bạn sẽ không nhận được lỗi vi phạm khóa ngoại.

9

Chuyển đổi cơ sở dữ liệu MySQL cơ sở dữ liệu Postgres với Django

Đầu tiên sao lưu dữ liệu của bạn trong cơ sở dữ liệu Mysql cũ trong đồ đạc json:

$ python manage.py dumpdata contenttypes --indent=4 --natural-foreign > contenttype.json 
$ python manage.py dumpdata --exclude contenttypes --indent=4 --natural-foreign > everything_else.json 

Sau đó chuyển settings.DATABASES của bạn để thiết lập postgres.

Tạo các bảng trong PostgreSQL:

$ python manage.py migrate 

Bây giờ xóa tất cả các nội dung được tự động thực hiện trong các di cư (django contenttypes, nhóm nằm vv):

$ python manage.py sqlflush | ./manage.py dbshell 

Và bây giờ bạn có thể an toàn nhập khẩu tất cả mọi thứ, và giữ cho pk của bạn giống nhau!

$ python manage.py loaddata contenttype.json 
$ python manage.py loaddata everything_else.json 

Thử nghiệm với Django == 1,8

+1

Làm việc hoàn hảo cho tôi với Django == 1.11.4 – endur

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