Problemas comuns:
- GRUPAR POR comportamento. O PostgreSQL tem um GROUP BY bastante restrito. Se você usar uma cláusula GROUP BY, cada coluna em seu SELECT deverá aparecer em seu GROUP BY ou ser usada em uma função de agregação.
- Truncado de dados. O MySQL truncará silenciosamente uma string longa para caber dentro de um
char(n)
coluna, a menos que seu servidor esteja em modo estrito, o PostgreSQL reclamará e fará você truncar sua string por conta própria. - Citar é diferente, o MySQL usa acentos graves para citar identificadores, enquanto o PostgreSQL usa aspas duplas.
- LIKE não diferencia maiúsculas de minúsculas no MySQL, mas não no PostgreSQL. Isso leva muitos usuários do MySQL a usar LIKE como um operador de igualdade de strings que não diferencia maiúsculas de minúsculas.
(1) será um problema se você usar o
group
do AR método em qualquer uma de suas consultas ou GROUP BY em qualquer SQL bruto. Faça alguma pesquisa por column "X" must appear in the GROUP BY clause or be used in an aggregate function
e você verá alguns exemplos e soluções comuns. (2) será um problema se você usar colunas de string em qualquer lugar em seu aplicativo e seus modelos não estiverem validando corretamente o comprimento de todos valores de string de entrada. Observe que criar uma coluna de string no Rails sem especificar um limite na verdade cria um
varchar(255)
coluna para que haja um :limit => 255
implícito mesmo que você não tenha especificado um. Uma alternativa é usar t.text
para suas strings em vez de t.string
; isso permitirá que você trabalhe com strings arbitrariamente grandes sem penalidade (pelo menos para o PostgreSQL). Como Erwin observa abaixo (e todas as outras chances que ele tiver), varchar(n)
é um anacronismo no mundo PostgreSQL. (3) não deve ser um problema, a menos que você tenha SQL bruto em seu código.
(4) será um problema se você estiver usando LIKE em qualquer lugar do seu aplicativo. Você pode corrigir isso alterando
a like b
para lower(a) like lower(b)
(ou upper(a) like upper(b)
se você gosta de gritar) ou a ilike b
mas esteja ciente de que ILIKE do PostgreSQL
não é padrão. Existem outras diferenças que podem causar problemas, mas esses parecem ser os problemas mais comuns.
Você terá que revisar algumas coisas para se sentir seguro:
group
chamadas.- SQL bruto (incluindo qualquer snippet em
where
chamadas). - Validações de comprimento de string em seus modelos.
- Todos os usos de LIKE.