2009/6/3 Leandro Müller <leandr...@muriki.com.br>:
>
> Sou novo nesta lista, nesses últimos meses estou migrando uma base de dados
> de 4gb para postgresql 8.3.7, utilizávamos mysql na empresa, mas ficou muito
> lento devido a complexidade de relatórios e diversos recursos que precisamos
> agora.

Seja bem vindo!


>
> Bom o único problema que tivemos com o banco de dados é quanto a pesquisa
> com ilike em palavras com acentos.
>
> Exemplo:
>
> Select nome from cliente where nome ilike ‘joao%’;
>
> O João não lista, fiz testes com a versão 8.4 e o mesmo ocorre, esse banco
> esta na codificação UTF8

Sim João é diferente de Joao e também diferente de joão, JOÃO e joao.


>
> Tentei criar um banco como latin1 porem o post não aceita criar.

Você não pode mudar mas ele aceita criar (vide initdb) mas tem que ser
compatível com o locale de seu S.O.


>
> Alguém tem idéia de que tipo configuração devo fazer para fazer pesquisas
> com acento?
>

Quando o encoding é LATIN1, LATIN2, LATIN9 ou WIN1250 podemos usar a
função to_ascii:
http://www.postgresql.org/docs/current/interactive/functions-string.html

Quando se utiliza o UTF8 o pessoal tem utilizado uma função de
conversão como esta:

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

Ficaria assim:
SELECT nome FROM cliente WHERE sem_acento(nome) ilike sem_acento(‘joao%’);

Caso faça uso intensivo desta query considere a criação de um índice
funcional para melhorar a performance.

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a