Não é possível converter a coluna de texto do PostgreSQL para bytea
No meu aplicativo eu estou usando uma tabela de banco de dados postgresql com uma coluna "texto" para armazenar objetos python em pickled. Como driver de banco de dados, estou usando o psycopg2 e até agora só passei cadeias de caracteres python (não objetos unicode) para o banco de dados e recuperei as strings do banco de dados. Isso basicamente funcionou bem até que eu recentemente decidi fazer a manipulação de String da maneira melhor / correta e adicionei a seguinte construção à minha camada de DB:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
Isso basicamente funciona bem em todos os lugares no meu aplicativo e estou usando objetos unicode, quando possível agora.
Mas para este caso especial com a coluna de texto contendo os objetos decapados, isso cria problemas. Eu consegui trabalhar no meu sistema de teste desta maneira:
recuperando os dados:SELECT data::bytea, params FROM mytable
escrevendo os dados:execute("UPDATE mytable SET data=%s", (psycopg2.Binary(cPickle.dumps(x)),) )
... mas infelizmente estou recebendo erros com o SELECT para algumas colunas no sistema de produção:
psycopg2.DataError: invalid input syntax for type bytea
Este erro também acontece quando tento executar a consulta no shell do psql.
Basicamente eu estou planejando converter a coluna de "texto" para "bytea", mas o erro acima também me impede de fazer essa conversão.
Tanto quanto eu posso ver, (ao recuperar a coluna como pura string python), existem apenas caracteres com ord (c) <= 127 na seqüência de caracteres.