Migração MySQL -> PostgreSQL

25 views
Skip to first unread message

Alan Facchini

unread,
Jul 30, 2015, 9:59:11 AM7/30/15
to GURU-SC
Bom dia galera!

Estamos migrando o banco de nossa aplicação, saindo do MySQL e indo para o PostgreSQL.
Estamos enfrentando alguns problemas, um deles é em relação ao fato do Postgres ser case insensitive e o outro é em relação a acentuação.
No MySQL quando eu pesquiso por "João", eu tenho como resultado [joao, Joao, JOAO, joão, João, JOÃO, ...]. No postgres isto não acontece.
Alguém sabe se tem como resolver estes problemas?

Att.

Alan Costa Facchini

Danimar Ribeiro

unread,
Jul 30, 2015, 10:09:00 AM7/30/15
to gur...@googlegroups.com
A gente usa uma função que remove acentos:

CREATE OR REPLACE FUNCTION sem_acento(text)
  RETURNS text AS
$BODY$ select translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC'); $BODY$
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;


Porém esta solução é melhor:
http://stackoverflow.com/questions/11005036/does-postgresql-support-accent-insensitive-collations



--
Você recebeu essa mensagem porque está inscrito no grupo "GURU-SC" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para guru-sc+u...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Danimar Ribeiro

G. Sobrinho

unread,
Jul 30, 2015, 10:16:56 AM7/30/15
to gur...@googlegroups.com
A solução mais robusta seria usar a extensão unaccent com uma coluna citext.

Dependendo do porte do projeto justificaria até mesmo um elasticsearch para tirar esse peso de consulta do postgres ;)
Cheers,

Gabriel Sobrinho

Gabriel Mazetto

unread,
Jul 30, 2015, 11:21:48 AM7/30/15
to gur...@googlegroups.com
PostgreSQL tem um suporte bom pra "full text search", se não interessar salvar as informações transformadas em banco (unaccent e citext), talvez valha a pena fazer um índice de busca e usar os parâmetros de consulta textuais:


Gabriel Mazetto < Rails::Developer

{
  :GTalk => bro...@gmail.com,
  :Skype => brodock,

G. Sobrinho

unread,
Jul 30, 2015, 11:48:32 AM7/30/15
to gur...@googlegroups.com
Esqueci dessa, é uma opção também! :)

Alan Facchini

unread,
Jul 30, 2015, 2:41:24 PM7/30/15
to GURU-SC, gabriel....@gmail.com
Obrigado pela ajuda galera!

Carlos Alexandro Becker

unread,
Jul 30, 2015, 3:38:27 PM7/30/15
to GURU-SC, gabriel....@gmail.com
Eu sempre usei unnacent: http://stackoverflow.com/a/13597082/405013

Quanto ao case sensitive... tu pode fazer algo tipo

 where lower(name) = lower($1)

Flw 

G. Sobrinho

unread,
Jul 30, 2015, 3:47:00 PM7/30/15
to Carlos Alexandro Becker, GURU-SC
Isso não é recomendado para bases grandes porque o banco vai fazer sequential scan mas em tabelas pequenas é okay :)

Carlos Alexandro Becker

unread,
Jul 31, 2015, 1:18:50 AM7/31/15
to G. Sobrinho, GURU-SC
sim, vdd...  tinha esquecido de comentar isso!
Reply all
Reply to author
Forward
0 new messages