Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mudando de MySQL para PostgreSQL para Ruby on Rails por causa do Heroku


Problemas comuns:
  1. 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.
  2. 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.
  3. Citar é diferente, o MySQL usa acentos graves para citar identificadores, enquanto o PostgreSQL usa aspas duplas.
  4. 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.