У меня есть гео-модель со свойством 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-users , но, как и Джонатан, я не знаю, является ли этоошибка или ошибка конфигурации.
Может ли кто-нибудь указать мне правильное направление?
Вот некоторая информация о настройках:
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