У меня есть гео-модель с свойством 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