2010-06-03 6 views
11

Estoy pensando en pasar de MySQL a Postgres para el desarrollo de Rails y solo quiero escuchar lo que otros desarrolladores que hicieron la mudanza tienen que decir al respecto.¿Cuántos de ustedes han pasado de MySQL a Postgresql? ¿Valió la pena?

Estoy buscando experiencias personales, no un tiroteo Mysql v Postgres, solo los pros y los contras a los que usted mismo ha llegado. Cosas que la gente no necesariamente piensa.

Siéntase libre de explicar por qué se mudó en primer lugar también.

+0

Debe ser wiki de la comunidad - - No hay una sola respuesta correcta para esto. –

+0

Sin mencionar la existencia de innumerables preguntas similares. –

+0

La respuesta correcta será la publicación que proporcione la mayor cantidad de información sobre cómo mover a postgres desde mysql, tal como lo pedí. Y la pregunta aquí se relaciona específicamente con el desarrollo de Rails, a diferencia de otras publicaciones. – concept47

Respuesta

8

Hice el cambio y, francamente, no podría estar más feliz. Mientras que Postgres carece de algunas cosas de MySQL (Insertar Ignorar, Reemplazar, Repostar cosas y Cargar datos, principalmente para mí), las características que tiene MÁS que maquillaje. Sus procedimientos almacenados son mucho más potentes y es mucho más fácil escribir funciones complejas y agregados en Postgres.

En cuanto al rendimiento, si se compara con InnoDB (que es justo debido a MVCC), entonces se siente al menos igual de rápido, posiblemente más rápido: no pudimos hacer algunas mediciones reales aquí debido a algunos limitaciones, pero ciertamente no ha habido un problema de rendimiento. Las consultas complejas con varias combinaciones son ciertamente más rápidas, MUCHO más rápidas.

Creo que es más probable que la comunidad de Postgres le proporcione la respuesta correcta a su problema.Todos y su abuela tienen 50 formas diferentes de hacer algo en MySQL. Con Postgres, accede a la lista de correo y es probable que recibas mucha ayuda muy buena.

Cualquiera de las diferencias de sintaxis y similares son un poco triviales.

En general, Postgres se siente mucho más "adulto" conmigo. Utilicé MySQL por años y ahora salgo de mi camino para evitarlo.

+0

No podría estar más de acuerdo. Mi abuela siempre me está molestando con nuevos esquemas chiflados para documentar la falta de restricciones de verificación de trabajo en MySQL. –

5

Oh cariño, esto podría terminar en lágrimas.

Hablando desde nuestra experiencia personal, nos mudamos de MySQL únicamente porque nuestro sistema de producción (Heroku) ejecuta PostgreSQL. Tuvimos consultas personalizadas para MySQL que se estaban rompiendo en PostgreSQL. Así que supongo que la moral de la historia aquí es ejecutar en el mismo DBMS sobre todo, de lo contrario puede tener problemas.

A veces también necesitamos insertar registros de forma rápida. Para ello, se utiliza PostgreSQL incorporado en COPY función, se utiliza de manera similar a esto en nuestra aplicación:

query = "COPY users(email) FROM STDIN WITH CSV" 
values = users.map! do |user| 
    # Be wary of the types of the objects here, they matter. 
    # For instance if you set the id to a string it will error. 

    %Q{#{user["email"]}} 
end.join("\n") 

raw_connection.exec(query) 
raw_connection.put_copy_data(values) 
raw_connection.put_copy_end 

Esto inserta ~ 500.000 registros en la base de datos en menos de dos minutos. Aproximadamente al mismo tiempo si agregamos más campos.

Otro par de cosas agradables PostgreSQL tiene sobre MySQL:

  • búsqueda de texto completo
  • consulta geográfica (PostGIS)
  • LIKE sintaxis es como esto email ~ 'hotmail|gmail', NOT LIKE es como email !~ 'hotmail|gmail'. El | indica una o.

En resumen: PostgreSQL es como ladrillos & mortero, donde MySQL es Lego. Vaya con lo que "sienta" bien para usted. Esta es solo mi opinión personal.

+1

'~' y '! ~' Son los operadores de expresiones regulares. '~~' es un atajo para LIKE. Más detalles en http://www.postgresql.org/docs/8.4/static/functions-matching.html Usar raw_connection para llamar a 'COPY' es un truco útil. –

+0

Creo que también puede hacer búsquedas de texto completo en MySQL? –

0

No he hecho el cambio yo mismo, pero me pican unas cuantas veces por la falta de cambios en el esquema transaccional de MySQL que aparentemente admite Postgre.

Esto resolvería los desagradables problemas que obtienes al pasar de tu entorno de desarrollo con sqlite a tu servidor MySQL y darte cuenta de que tus migraciones se han estropeado y se han quedado a medio hacer. (No, yo no hice esto en un servidor de producción, ¡pero sí arruinó nuestro servidor de pruebas compartido!)

1

Pasamos a PostgreSQL por varias razones a principios de 2007 (¿o fue el año anterior?). Las principales razones fueron: el apoyo

  • SQL - PostgreSQL es mucho mejor para complejas consultas SQL, por ejemplo con una gran cantidad de combinaciones y agregados
  • procedimientos almacenados de MySQL no se sentía muy maduro
  • MySQL cambios de licencia - Doble licencia, código abierto y comercial, una división que me hizo preguntarme sobre el futuro. Con la licencia BSD de PG, puede hacer lo que quiera.
  • Comportamiento defectuoso: cuando MySQL estaba contando filas, a veces solo devolvía un valor aproximado, no las filas contadas reales.
  • Restricciones se comportaron un poco extraño, insertando valores truncados/adaptados. Ver http://use.perl.org/~Smylers/journal/34246
  • La interfaz administrativa pgAdminIII sentía más estable y maduro que el homólogo de MySQL
  • PostgreSQL es muy sólido y seguro en caso de accidente de un corte

// John

Cuestiones relacionadas