Database

Como criar uma função de dump do conteúdo de textos no PostgreSQL para localizar caracteres inválidos?

RT.DB.FAQ-45309
Existem situações onde caracteres invalidos no conteúdo de determinadas colunas pode causar problemas. Para verificar o conteúdo destes campos, pode-se criar a função de banco abaixo:
CREATE OR REPLACE FUNCTION dump(text char) RETURNS char AS $$
declare
  v1 varchar;
  v2 varchar;
  first boolean := true;
 BEGIN
    v1 := '';
    v2 := '';
    for i in 1 .. length(text) loop
       v1 := v1 || substr(text,i,1) || '  ';
       v2 := v2 || to_hex(ascii(substr(text,i,1))) || ' ';
    end loop;
    RETURN v2 || chr(13) || v1;
 END;
$$ LANGUAGE plpgsql;

Esta função retorna um texto em 2 linhas onde a primeira linha é composta pela sequencia de caracteres em hexadecimal e a segunda pelo conteúdo dos caracteres (alinhando com a de cima)

select dump(descricao)
from produtos 
where id=133395;

Resultado:
52 45 46 52 45 53 43 4f 20 50 4f 50 20 46 52 55 54 41 20 41 42 41 43 41 58 49 20 31 36 30 58 33 30 47 
R  E  F  R  E  S  C  O     P  O  P     F  R  U  T  A     A  B  A  C  A  X  I     1  6  0  X  3  0  G