2011-02-11 11 views
11

¿Alguien ha hecho esto? ¿Es un proceso fácil? Estamos pensando en cambiar para las transacciones y porque parece que mysql está "craping out" últimamente.¿Cómo puedo convertir fácilmente una aplicación Django de mySQL a PostgreSQL?

+0

1) MySQL transacciones de apoyo (InnoDB) 2) ¿Qué le hace pensar que MySQL es "Crapping a cabo" últimamente? –

+0

Por ahora, simplemente empezaremos a obtener los tonos de estos errores: OperationalError: (1205, 'Se agotó el tiempo de espera de bloqueo de la conexión, intente reiniciar la transacción'). Además, usar South con Django a veces duele sin transacciones reales. –

+1

MySQL no admite transacciones de esquema, que pueden causar un dolor de cabeza masivo para migraciones – yarbelk

Respuesta

1

Nunca lo he hecho personalmente, pero parece que una combinación de las opciones dumpdata y loaddata de manage.py sería capaz de resolver su problema bastante fácilmente. Es decir, a menos que tenga muchas cosas específicas de la base de datos que viven fuera del ORM, como los procedimientos almacenados.

+0

que funcionan, pero en algún momento es necesario truncar todas las tablas creadas por syncdb – Alexey

+0

dump data carga todo el conjunto de datos en memoery antes de serializarlo - esto es un problema para un gran conjunto de datos. http://www.ofbrooklyn.com/2010/07/18/migrating-django-mysql-postgresql-easy-way/ muestra cómo dividir este proceso para evitar bloquear su servidor. – yarbelk

0

No lo he hecho tampoco. Primero seguiría esto migration guide, there is a MySql section que debería encargarse de todos sus datos. Entonces django simplemente cambia el mysql a postgre en la configuración. Creo que debería estar bien.

Encontré otra pregunta en stackoverflow que debería ayudar con la conversión de mysql a postgre here.

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

  2. Crear base de datos y usuario en postrgesql

  3. Establezca su base de datos recién creada en postrgesql como base de datos predeterminada en la configuración django o use param --datab ase = your_postrgesql_database próximos pasos
  4. Ejecute syncdb para crear tablas.

    pitón syncdb [--database = your_postrgesql_database] --noinput

  5. Crear volcado sin datos, la caída de todas las tablas y vaciado de la carga. O trunque todas las tablas (tabla django_content_type con datos que pueden no ser iguales a sus datos anteriores, es el camino a muchos errores). En este paso, necesitamos tablas vacías en postgresql-db.

  6. Cuando se tiene mesas vacías en PostgreSQL-DB sólo tiene que cargar sus datos:

    python manage.py loaddata data.json

Y ser divertido!

0

me escribió un comando de administración de Django que copia una base de datos a otro: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d

necesita añadir tanto la base de datos en la configuración y el uso de este comando:

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

Lo bueno de este comando es que copia recursivamente los objetos dependientes.Por ejemplo, si el modelo tiene 2 claves externas y dos relaciones de Muchos a Muchos, copiará los otros objetos primero para asegurarse de que no recibirá un error de violación de clave externa.

9

conversión de base de datos MySQL de base de datos PostgreSQL con Django

Primera copia de seguridad de datos de la base de datos MySQL de edad en los accesorios 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 

luego cambiar sus ajustes settings.DATABASES a Postgres.

Crear las tablas en PostgreSQL:

$ python manage.py migrate 

Ahora borrar todo el contenido que se hace automáticamente en el emigran (Django ContentTypes, grupos de usuarios, etc):

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

y ahora se puede con seguridad importación ¡todo, y mantenga sus pk's iguales!

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

probado con Django == 1.8

+1

Me funcionó a la perfección con Django == 1.11.4 – endur

Cuestiones relacionadas