No se puede convertir la columna de texto PostgreSQL a bytea
En mi aplicación, estoy usando una tabla de base de datos postgresql con una columna de "texto" para almacenar objetos de Python encurtidos. Como controlador de base de datos, estoy usando psycopg2 y hasta ahora solo pasé cadenas de python (no objetos-unicode) al DB y recuperé cadenas del DB. Básicamente, esto funcionó bien hasta que recientemente decidí hacer que la gestión de cadenas fuera la mejor / forma correcta y añadí la siguiente construcción a mi capa DB:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
Básicamente, esto funciona bien en todas partes en mi aplicación y ahora estoy usando objetos Unicode donde sea posible.
Pero para este caso especial con la columna de texto que contiene los objetos encurtidos, se producen problemas. Lo tengo funcionando en mi sistema de prueba de esta manera:
recuperando los datos:SELECT data::bytea, params FROM mytable
escribiendo los datos:execute("UPDATE mytable SET data=%s", (psycopg2.Binary(cPickle.dumps(x)),) )
... pero desafortunadamente estoy obteniendo errores con SELECT para algunas columnas en el sistema de producción:
psycopg2.DataError: invalid input syntax for type bytea
Este error también ocurre cuando intento ejecutar la consulta en el shell psql.
Básicamente, estoy planeando convertir la columna de "texto" a "bytea", pero el error anterior también me impide hacer esta conversión.
Por lo que puedo ver, (cuando se recupera la columna como una cadena de python pura) solo hay caracteres con ord (c) <= 127 en la cadena.