【问题标题】:Error Saving geodjango PointField保存 geodjango PointField 时出错
【发布时间】:2011-12-01 20:03:20
【问题描述】:

我有一个带有 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 group 上找到 Jonathan S. 的类似报告,但和 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

【问题讨论】:

    标签: django postgresql postgis psycopg2 geodjango


    【解决方案1】:

    终于弄明白了。

    this ticket 中记录的不同之处在于 Postgres 9.1 默认启用了standard_conforming_strings。这不会是一个问题,真的,除了 Django 的适配器有一个基本上忽略它的错误。 A patch was submitted 它对我有用。

    不愿意或无法打补丁或升级的用户,可以直接使用this database adapter instead

    【讨论】:

    • 感谢分享马修。我真的很高兴我偶然发现了你的帖子:)
    • 谢谢!在 postgresql.conf 中设置 standard_conforming_strings = off 也对我有用。
    猜你喜欢
    • 2016-04-29
    • 2012-10-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2018-01-27
    相关资源
    最近更新 更多