Problemas comunes:
- Comportamiento GROUP BY. PostgreSQL tiene un GRUPO POR bastante estricto. Si usa una cláusula GROUP BY, entonces cada columna en su SELECT debe aparecer en su GROUP BY o usarse en una función agregada.
- Truncamiento de datos. MySQL truncará silenciosamente una cadena larga para que quepa dentro de un
char(n)
a menos que su servidor esté en modo estricto, PostgreSQL se quejará y hará que usted mismo trunque su cadena. - Las citas son diferentes, MySQL usa acentos graves para citar identificadores, mientras que PostgreSQL usa comillas dobles.
- LIKE no distingue entre mayúsculas y minúsculas en MySQL pero no en PostgreSQL. Esto lleva a muchos usuarios de MySQL a usar LIKE como un operador de igualdad de cadenas que no distingue entre mayúsculas y minúsculas.
(1) será un problema si usa el group
de AR en cualquiera de sus consultas o GROUP BY en cualquier SQL sin procesar. Realice una búsqueda de column "X" must appear in the GROUP BY clause or be used in an aggregate function
y verá algunos ejemplos y soluciones comunes.
(2) será un problema si usa columnas de cadena en cualquier parte de su aplicación y sus modelos no validan correctamente la longitud de todo valores de cadena entrantes. Tenga en cuenta que crear una columna de cadena en Rails sin especificar un límite en realidad crea un varchar(255)
columna por lo que en realidad hay un implícito :limit => 255
aunque no haya especificado uno. Una alternativa es usar t.text
para sus cadenas en lugar de t.string
; esto le permitirá trabajar con cadenas arbitrariamente grandes sin penalización (al menos para PostgreSQL). Como Erwin señala a continuación (y cada otra oportunidad que tiene), varchar(n)
es un poco anacrónico en el mundo de PostgreSQL.
(3) no debería ser un problema a menos que tenga SQL sin procesar en su código.
(4) será un problema si está utilizando LIKE en cualquier parte de su aplicación. Puedes arreglar esto cambiando a like b
a lower(a) like lower(b)
(o upper(a) like upper(b)
si te gusta gritar) o a ilike b
pero tenga en cuenta que ILIKE de PostgreSQL
no es estándar.
Hay otras diferencias que pueden causar problemas, pero esos parecen ser los problemas más comunes.
Tendrás que revisar algunas cosas para sentirte seguro:
group
llamadas.- SQL sin formato (incluidos los fragmentos en
where
llamadas). - Validaciones de longitud de cadena en sus modelos.
- Todos los usos de LIKE.