Postgres NOTIFYは、文字列リテラルのみをサポートします (バイナリ データはサポートしません)。次の方法で、ピクルされたオブジェクトでそれを使用することができました。
message = cPickle.dumps(objectFoo)
cursor = connection.cursor() # this is psycopg2 connection
cursor.execute("NOTIFY channelFoo, %s", [message])
ただし、エンコードされたオブジェクトにトリッキーなバイトが含まれている場合 (たとえば、'\x80' 文字列)。からエラーが返されexecute()
ます:
psycopg2.DataError: "UTF8" をエンコードするための無効なバイト シーケンス: 0x80
これを回避する方法はありますか?オブジェクトが保持するデータに関係なく、ピクルされたオブジェクトをPostgres文字列に確実にシリアル化できるようにするものはありますか?