psycopg2.InternalError 无论我怎么做都出现

1 投票
2 回答
2795 浏览
提问于 2025-04-15 19:24

我在使用Django的时候,刚刚删除并重新创建了数据库,目的是清空表里的数据。现在,当我尝试做任何与数据库相关的操作时,出现了:

./manage.py sql portfolio
Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 222, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 286, in handle
    app_output = self.handle_app(app, **options)
  File "/usr/lib/pymodules/python2.6/django/core/management/commands/sql.py", line 10, in handle_app
    return u'\n'.join(sql_create(app, self.style)).encode('utf-8')
  File "/usr/lib/pymodules/python2.6/django/core/management/sql.py", line 28, in sql_create
    tables = connection.introspection.table_names()
  File "/usr/lib/pymodules/python2.6/django/db/backends/__init__.py", line 491, in table_names
    return self.get_table_list(cursor)
  File "/usr/lib/pymodules/python2.6/django/db/backends/postgresql/introspection.py", line 30, in get_table_list
    AND pg_catalog.pg_table_is_visible(c.oid)""")
  File "/usr/lib/pymodules/python2.6/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
psycopg2.InternalError: BŁĄD:  current transaction is aborted, commands ignored until end of transaction block

如你所见,这只是生成代码,所以在事务方面应该没有问题。到底发生了什么呢? :-(

2 个回答

0

查看Postgres的日志文件,看看是什么具体的查询导致了数据库错误。然后试着找出是Django的哪个部分发出了这个查询。

另外,可以看看这个链接:https://github.com/django-debug-toolbar/django-debug-toolbar/issues/351。里面提到可能是django-debug-toolbar导致了这个错误。你可以尝试把它禁用掉。

3

这个错误的意思是,你的Postgres数据库在处理事务的时候出了问题,导致它在事务进行中失败了,但这个事务既没有被提交也没有被撤销,所以它就卡住了。

简单来说,你需要执行一个回滚命令(通常可以在Django的命令行界面中完成),或者直接结束Postgres的进程。

需要注意的是(根据你的服务器设置),即使Django没有在运行,Postgres的进程还是会继续运行,所以你每次都看到同样的错误,可能是因为它仍然卡在同一个进程里。

如果你已经这样做了,但它还是每次都出现这个问题,那就说明你的代码里某个地方触发了这个错误,你需要去仔细查找一下。

撰写回答