保存geodjango PointField时出错

mat*_*anm 22 django postgresql postgis psycopg2 geodjango

我有一个带有PointField属性的地理模型.一切都在本地完美,但当我尝试在服务器上保存实例时,我收到以下错误:

django.db.utils.DatabaseError: invalid byte sequence for encoding "UTF8": 0x00
Run Code Online (Sandbox Code Playgroud)

我挖掘了源代码,发现值的序列化方式不同; 具体而言,在服务器上执行查询之前,该值未被转义.它似乎正在进行转义psycopg2.Binary.getquoted(),当然,它不会在服务器上返回正确的值.

在我的机器上:

from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)

在服务器上:

from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)

好的,这解释了为什么它认为我试图插入一个空字节.(因为我.)所以现在我已经足够了解Jonathan S.在django-users组中找到类似的报告会出现什么问题但是,就像Jonathan一样,我不知道这是错误还是配置错误.

有人能指出我正确的方向吗?

以下是有关设置的一些信息:

          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
Run Code Online (Sandbox Code Playgroud)

mat*_*anm 42

终于设法搞清楚了.

本票证所示,差异在于Postgres 9.1 standard_conforming_strings默认启用.这不会是一个问题,真的,除了Django的适配器有一个基本上忽略它的bug.提交了一个补丁,它正在为我工​​作.

对于那些不愿意或无法应用补丁或升级的人,您只需使用此数据库适配器即可.