2

几天前,我在 django1.4 中使用管理功能编写了一个项目,目的是为从遗留系统迁移到新系统的调试数据制作 CRUD(迁移并不完全成功),我使用 django 编写它1.4 并在我的笔记本电脑中使用生产数据库的副本,但在我的 linux 中我使用 postgresql9.1,因此,当我尝试将项目配置为原始服务器(postgresql8.1)中的测试数据库时,我在syncdbmigrate陈述:

File "/home/diegueus9/webapps/fixsysandinos/local/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in execute
    return self.cursor.execute(sql, params)
  File "/home/diegueus9/webapps/fixsysandinos/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
    return self.cursor.execute(query, args)
django.db.utils.DatabaseError: syntax error at or near "RETURNING"
LINE 1: ...") VALUES (E'permission', E'auth', E'permission') RETURNING ...

所以,我做了一些研究,我在 django 中找到了票#10467(目前已关闭),它说使用 statment RETURNING 在 postgresql 8.1 中引入了一个错误,因为它直到 8.2 才支持该语法(我认为) ,该错误在 8 个月前显示为已关闭,但我认为在某些时候被重新引入。在票的线程中说问题可能与自动提交行为有关,并谈到connection.features.can_return_id_from_insert.

所以问题是:

这是一个必须重新打开的错误?我必须禁用自动提交行为并承担风险(我不希望如此)或者通过我可以设置connection.features.can_return_id_from_insert的设置False并以这种方式实现我的目标?

4

1 回答 1

0

当升级数据库或降级您的 django 版本不是一个选项,因为是客户端的要求,您仍然可以在您自己的责任下can_return_id_from_insert使用 django1.4,您可以False在第 77 行禁用 RETURN 语句设置django.db.backends.postgresql_psycopg2.base。但这会影响行为django 所以你真的必须或应该使用类似virtualenvwrapper的东西

于 2012-06-10T16:09:18.050 回答