Usando sed para converter caracteres hexadecimais no arquivo de despejo postgresql

2

Estou trabalhando para mover vários bancos de dados de um servidor Postgresql 8.3 para um servidor Postgresql 8.4. Ele funcionou bem até agora, mas uma base me deu alguns problemas. O banco de dados está listado como codificado em unicode no servidor 8.3, mas de alguma forma um programa cliente conseguiu injetar alguns dados unicode inválidos nele.

Quando faço um despejo normal e restauro usando o formato personalizado do postgres, o novo servidor não o aceita, reclamando de erros de unicode.

Meu plano é fazer um despejo de texto simples do banco de dados, depois usar sed para substituir os caracteres inválidos por nada (eles não são necessários). Mas como você faz o sed funcionar em valores hexadecimais / binários em um arquivo?

    
por Bernt 13.09.2010 / 11:01

6 respostas

1

Uma solução típica é usar iconv -c .

    
por 25.12.2010 / 07:01
1

Por resposta de Peter, usar o iconv é a solução típica que a maioria das pessoas usa para limpar os dados ruins. Se você quiser fazer alguma análise sobre os dados com antecedência (e talvez limpá-lo no banco de dados original), você pode usar o seguinte link para encontrar o ponto problemático.

    
por 01.04.2011 / 17:39
0

De acordo com a substituição do sed binário no stackoverflow, sua melhor aposta é passar por hexdump :

hexdump input | sed -e "..." | xxd -r -p output
    
por 13.09.2010 / 13:14
0

Isso removerá todos os caracteres que estão fora do intervalo 0x32 (espaço) para 0x7e (til):

someprog | LANG=C sed 's/[\x00-\x31\x7f-\xff]//g'

Você pode usar outros intervalos de caracteres para ser mais seletivo.

    
por 13.09.2010 / 19:59
0

Um colega me deu uma dica na direção de Perl:

cat databasedump.sql | perl -pi-e / \ xc3 \ xa9 // g; ' > fixeddatabasedump.sql

Ok, então não é sed, mas pelo menos a sintaxe é mais ou menos a mesma.

    
por 17.09.2010 / 14:47
0

tr -d '[:xdigit:]' < old_database > new_database também pode funcionar.
tr -d exclui apenas '[:xdigit:]' caracteres hexadecimais

    
por 01.04.2011 / 17:45