У меня есть геомодель со свойством PointField. Все работает идеально локально, но когда я пытаюсь сохранить экземпляр на сервере, я получаю следующую ошибку:
django.db.utils.DatabaseError: invalid byte sequence for encoding "UTF8": 0x00
Я покопался в источнике и обнаружил, что значения сериализуются по-другому; в частности, это значение не экранируется до выполнения запроса на сервере. Похоже, что экранирование выполняется psycopg2.Binary.getquoted ()
, и, конечно же, он не возвращает правильное значение на сервере.
На моей машине:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\\\000'::bytea"
На сервере:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\000'::bytea"
Хорошо, это объясняет, почему он думает, что я пытаюсь вставить нулевой байт. (Потому что я.) Итак, теперь я знаю достаточно о том, что идет не так, чтобы найти похожий отчет Джонатана С. в группе пользователей django , но, как и Джонатан, я не знаю, является ли это ошибка или ошибка конфигурации.
Может ли кто-нибудь указать мне правильное направление?
Вот некоторая информация о настройках:
My computer Server
OS OSX 10.7 CentOS 5.5
Python 2.7 2.6
Django 1.3 1.3
Postgres 9.0.4 9.9.1
postgis 1.5.2 1.5.3-2.rhel5
geos 3.3.0 3.3.0-1.rhel5