2012-04-26 84 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