Silfar Goulart escreveu:
> Bem resumindo:
> 
> select to_ascii('CRÉD', 'LATIN1')
> 
> Se o server_encoding for win1252 retorna 'CRED'
> Mas se o server encoding for UTF8 retorna 'CRA D', Neste caso deveria se 
> usar a função convert :
> 
> select to_ascii(convert('CRÉD', 'utf8', 'LATIN1'), 'latin1'), mas aí 
> acontece um erro, pq to_ascii espera um tipo texto e convert agora 
> retorna bytea.
> 
> Aí não sei como resolver, acho que esta mudança deve ter acontecido no 8.3.
> 


Por quê você não vai por um caminho mais simples e utiliza uma função 
do tipo:

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

Repare que não estão contemplados todos os caracteres acentuados 
(creio que os do português estão), mas, aí, é só uma questão de 
complementar as listas acima (caracteres acentuados e os 
correspondentes não acentuados).

Dependendo do conteudo de seu banco de dados pode ser que você 
necessite tratar, por ex. o n com til, s com cedilha, os com caron (um 
circunflexo invertido), os com barra etc.

Se você utilizar árabe, hangul ou chinês (entre outros) não tenho a 
menor idéia do comportamento esperado para esta função.

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

Responder a