Подтвердить что ты не робот

Ошибка сохранения геоданных PointField

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

Ответ 1

Наконец удалось разобраться.

Разница, как указано в этот билет, заключается в том, что Postgres 9.1 по умолчанию имеет standard_conforming_strings. Что бы не было проблемой, действительно, кроме адаптера Django есть ошибка, которая в основном игнорирует ее. Патч был отправлен, и он работает для меня.

Для тех, кто не желает или не может применить исправление или обновление, вы можете просто использовать этот адаптер базы данных.