PostgreSQL-Textspalte kann nicht in bytea konvertiert werden
In meiner Anwendung verwende ich eine postgresql-Datenbanktabelle mit einer "Text" -Spalte, um eingelegte Python-Objekte zu speichern. Als Datenbanktreiber verwende ich psycopg2 und habe bisher nur Python-Strings (keine Unicode-Objekte) an die DB übergeben und Strings aus der DB abgerufen. Dies funktionierte im Prinzip einwandfrei, bis ich mich kürzlich entschied, das String-Handling besser / korrekter zu gestalten, und meiner DB-Ebene das folgende Konstrukt hinzufügte:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
Dies funktioniert im Grunde überall in meiner Anwendung und ich verwende jetzt, wo es möglich ist, Unicode-Objekte.
Aber für diesen speziellen Fall mit der Textspalte, die die eingelegten Objekte enthält, macht es Probleme. Ich habe es in meinem Testsystem so zum Laufen gebracht:
Daten abrufen:SELECT data::bytea, params FROM mytable
Schreiben der Daten:execute("UPDATE mytable SET data=%s", (psycopg2.Binary(cPickle.dumps(x)),) )
... aber leider bekomme ich bei einigen Spalten im Produktivsystem Fehler mit dem SELECT:
psycopg2.DataError: invalid input syntax for type bytea
Dieser Fehler tritt auch auf, wenn ich versuche, die Abfrage in der psql-Shell auszuführen.
Grundsätzlich plane ich, die Spalte von "text" in "bytea" zu konvertieren, aber der obige Fehler hindert mich auch daran, diese Konvertierung durchzuführen.
Soweit ich sehen kann (beim Abrufen der Spalte als reine Python-Zeichenfolge), enthält die Zeichenfolge nur Zeichen mit ord (c) <= 127.