Невозможно преобразовать текстовый столбец PostgreSQL в bytea
В моем приложении я использую таблицу базы данных postgresql с «текстовым» столбцом для хранения маринованных объектов Python. В качестве драйвера базы данных я использую psycopg2, и до сих пор я передавал только строки python (не unicode-объекты) в БД и извлекал строки из БД. Это в основном работало хорошо, пока я недавно не решил сделать String-обработку лучше / правильнее и добавил следующую конструкцию к моему уровню DB:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
Это в основном работает везде в моем приложении, и сейчас я использую unicode-объекты, где это возможно.
Но для этого особого случая с текстовым столбцом, содержащим маринованные объекты, это создает проблемы. Я получил его в моей тестовой системе следующим образом:
извлечение данных:SELECT data::bytea, params FROM mytable
запись данных:execute("UPDATE mytable SET data=%s", (psycopg2.Binary(cPickle.dumps(x)),) )
... но, к сожалению, я получаю ошибки с SELECT для некоторых столбцов в производственной системе:
psycopg2.DataError: invalid input syntax for type bytea
Эта ошибка также происходит, когда я пытаюсь выполнить запрос в оболочке psql.
В основном я планирую преобразовать столбец из «text» в «bytea», но приведенная выше ошибка также не позволяет мне выполнить это преобразование.
Насколько я вижу, (при извлечении столбца в виде чистой строки Python) в строке присутствуют только символы с ord (c) <= 127.