2012-04-26 118 views
3

我无法将任何数据添加到我的数据库。它允许我修改表中的条目,但任何会在数据库中创建新行或新列的操作都会神秘地失败。这里是堆栈跟踪:django psycopg2和postgresql插入错误

Traceback (most recent call last): 
    File "manage.py", line 25, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/management/commands/migrate.py", line 107, in handle 
    ignore_ghosts = ignore_ghosts, 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/__init__.py", line 219, in migrate_app 
    success = migrator.migrate_many(target, workplan, database) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/migrators.py", line 235, in migrate_many 
    result = migrator.__class__.migrate_many(migrator, target, migrations, database) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/migrators.py", line 310, in migrate_many 
    result = self.migrate(migration, database) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/migrators.py", line 134, in migrate 
    self.done_migrate(migration, database) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/migrators.py", line 113, in done_migrate 
    self.record(migration, database) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/South-0.7.4-py2.7.egg/south/migration/migrators.py", line 280, in record 
    record.save() 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 463, in save 
    self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 551, in save_base 
    result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/manager.py", line 203, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/query.py", line 1576, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/sql/compiler.py", line 910, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/db/backends/util.py", line 40, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/Django-1.4-py2.7.egg/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" at character 171 

它工作正常,直到我将数据库迁移到另一台服务器。现在我有各种麻烦,我不确定要做什么。另外,如果试图向数据库添加字段,这似乎也会发生在南方。奇怪的是,修改数据库中的现有对象/列成功不会失败。我真的不确定要做什么,并且会喜欢任何帮助。

+0

你正在使用的postgresql的版本是什么?你能确认它的9.1吗? – 2012-04-26 19:22:48

+0

PostgreSQL 8.1.23,Django要求9.1正确吗?或者至少与psycopg2后端(我认为psycopg是<9.1)。感谢您的洞察力,这正是我寻找的答案 – ecbtln 2012-04-26 19:43:19

回答

4

8.1不支持RETURNING子句。因此,将您的数据库版本升级到当前的稳定版本。

+1

谢谢你的帮助 – 2012-06-28 00:25:09

0

8.1不支持插入对象的RETURNING ID,因此您需要禁用它。

from django.db import connection 
##just before insert statement 
connection.features.can_return_id_from_insert = False  
###some insert statement