Bem, depois da ajuda dos amigos aqui da lista, vendo que ainda não há algo 
nativo no postgres, resolvi usar uma função para minhas pesquisas, assim 
resolvo meu problema por hora.

Segue a função caso alguém precise

CREATE OR REPLACE FUNCTION fsemacento(character varying)
  RETURNS character varying AS
$BODY$
SELECT TRANSLATE(upper($1), 
'áéíóúàèìòùãõâêîôôäëïöüçÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ', 
'aeiouaeiouaoaeiooaeioucAEIOUAEIOUAOAEIOOAEIOUC')
$BODY$
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION fsemacento(character varying) OWNER TO postgres;

Para usar faço o seguinte: (para buscar João, por exemplo)

SELECT * FROM TABELA
WHERE (fsemacento(nome) = fsemacento('joao'))

Pode-se usar com Like e afins


Além de ignorar os acentos ela também ignora maiusculas e minusculas


ps: Pessoal, não sou expert no PG, por isso caso haja alguma coisa a 
melhorar nesta função, sou todo ouvidos!




Marcelo Silva
--------------------------------------------------
Desenvolvedor Delphi, PHP
msn: [email protected]
cel.: (11) 9693-4251


-----Mensagem Original----- 
From: Euler Taveira de Oliveira
Sent: Friday, October 07, 2011 3:39 PM
To: [email protected]
Subject: Re: [pgbr-geral] Desculpem, mais uma vez sobre acentos (LATIN1)

On 07-10-2011 11:21, Marcelo Silva (IG) wrote:
> Pessoal, peço desculpas por trazer mais uma vez esse assunto a lista, mas 
> vira
> e mexe temos esse problema com acentos na lingua portuguesa.
> Segundo a necessidade da empresa eu preciso gravar os dados exatamentes 
> como
> são, por exemplo Maiusculas e Minusculas nos nomes e afins,
> caracteres especiais e acentos como são na lingua portuguesa mesmo.
> Estou trabalhando com banco UTF-8 pois de inicio como sou novo no PG 
> acabei
> criando assim...
>
Você leu a discussão [1]? Durante o PGBR 2011, vou responder sobre essas
questões durante o meu tutorial porque sei que isso é uma dúvida recorrente 
na
lista mas até lá...

> A base foi criada assim:
> CREATE DATABASE teste
> WITH OWNER = postgres
> ENCODING = 'LATIN1'
> TABLESPACE = pg_default
> LC_COLLATE = 'C'
> LC_CTYPE = 'C'
> CONNECTION LIMIT = -1;
>
Não use LC_* = C porque a ordenação não é a esperada no português do Brasil.

> Sendo que foi criada em Latin1 ele não deveria ignorar os acentos e 
> caracteres
> especiais e até mesmo Maiuscula e Minuscula?
Não. Veja que LATIN1 != C. Esta última (ASCII) deve ser evitada [2] como
codificação de caracteres (aka encoding).

> Será que foi porque eu restaurei UTF8 para LATIN1 ?
Não.

> Existe uma forma mais simples para se trabalhar com acentos no postgres ou 
> o
> metodo é esse mesmo?
>
Dependendo de quão sofisticada é a sua busca, você pode utilizar diversos
métodos desde busca textual (tsearch) até expressões regulares. Ainda *não* 
há
um collation que ignore maiúsculas/minúsculas e acentos.


[1]
http://listas.postgresql.org.br/pipermail/pgbr-geral/2011-September/026844.html
[2]
http://www.postgresql.org/docs/current/static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED


-- 
    Euler Taveira de Oliveira - Timbira       http://www.timbira.com.br/
    PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a