Django 无法删除数据库:psycopg2.OperationalError:无法删除当前打开的数据库

2023-11-24

每当我尝试通过 manage.py 运行 Django 测试时,测试都会运行良好,但是最后当 Django 销毁数据库时,会发生以下错误:

Destroying test database for alias 'default'...
Traceback (most recent call last):
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
psycopg2.OperationalError: cannot drop the currently open database


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Applications/PyCharm.app/Contents/helpers/pycharm/django_test_manage.py", line 129, in <module>
    utility.execute()
  File "/Applications/PyCharm.app/Contents/helpers/pycharm/django_test_manage.py", line 104, in execute
    PycharmTestCommand().run_from_argv(self.argv)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/core/management/commands/test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Applications/PyCharm.app/Contents/helpers/pycharm/django_test_manage.py", line 91, in handle
    failures = TestRunner(test_labels, verbosity=verbosity, interactive=interactive, failfast=failfast, keepdb='--keepdb' in sys.argv)
  File "/Applications/PyCharm.app/Contents/helpers/pycharm/django_test_runner.py", line 256, in run_tests
    extra_tests=extra_tests, **options)
  File "/Applications/PyCharm.app/Contents/helpers/pycharm/django_test_runner.py", line 156, in run_tests
    return super(DjangoTeamcityTestRunner, self).run_tests(test_labels, extra_tests, **kwargs)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/test/runner.py", line 534, in run_tests
    self.teardown_databases(old_config)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/test/runner.py", line 509, in teardown_databases
    connection.creation.destroy_test_db(old_name, self.verbosity, self.keepdb)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/base/creation.py", line 264, in destroy_test_db
    self._destroy_test_db(test_database_name, verbosity)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/base/creation.py", line 283, in _destroy_test_db
    % self.connection.ops.quote_name(test_database_name))
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
django.db.utils.OperationalError: cannot drop the currently open database

我已经检查以确保没有其他任何东西连接到数据库 - 为什么 Django 不能删除数据库?

注意:我使用的是 PostgreSQL


TL;DR

如果您只想要解决方案,就在这里。 确保您的 Postgres 服务器有一个“postgres”数据库。您可以通过连接来检查psql,并运行/list or /l。您可以通过运行以下命令来创建数据库:CREATE DATABASE postgres在 psql 中。

Extended

Django 不喜欢从您指定的“默认”数据库运行“初始化查询”(大概是创建测试数据库之类的事情)DATABASES环境。这被认为是生产数据库,因此 Django 的最佳利益是不要在那里乱搞。

这就是为什么在测试开始时会显示以下内容(忽略我的文件系统):

    /Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/postgresql/base.py:247: 
    RuntimeWarning: Normally Django will use a connection to the 'postgres' database to avoid running initialization queries against the production database when it's not needed 
    (for example, when running tests). Django was unable to create a connection to the 'postgres' database and will use the default database instead.
    RuntimeWarning

Django 在您指定的主机上查找名为“postgres”的数据库DATABASES设置,这是运行查询以创建和删除测试数据库的位置。 (注意:Django 不需要在您的设置中显式指定“postgres”数据库,它只是在您的设置中指定的任何数据库服务器上查找它)。

看起来,如果这个“postgres”数据库不存在,Django 可以创建测试数据库并运行测试,但无法删除测试数据库。这可能是因为 Postgres 不允许您删除当前连接的数据库,但是对我来说,Django 似乎没有理由不能从 中指定的“默认”(生产)数据库中删除测试数据库。设置。我认为它正在使用“默认”数据库来创建测试数据库,因此似乎没有理由不能删除它。

无论如何,解决方案只是使用简单的 SQL 语句创建“postgres”数据库:CREATE DATABASE postgres。创建数据库后,一切正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 无法删除数据库:psycopg2.OperationalError:无法删除当前打开的数据库 的相关文章

随机推荐

  • “左值”和“右值”的命名背后的原因是什么?

    C C 中 左值 和 右值 的命名背后的原因是什么 标准中提到了这一点 左值 历史上如此称呼 因为左值可能出现在赋值表达式的左侧 右值 历史上如此称呼 因为右值可以出现在赋值表达式的右侧 也就是说 左值是您可以分配给的东西 右值是您可以从中
  • 适用于 Java 的免费/开源测试生成器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 Java 是否有任何库可以为现有代码生成单元测试或单元测试框架 我正在寻找类似的东西验算师 理想情况下 它会生成遵循 JUnit4 或 TestNG 约定的代码 看起来像Agitar
  • 无法写入 JSON:JsonObject;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: JsonObject

    春季启动2 5 PostMapping cart product public Response addProduct RequestBody Map
  • 暂停 getUserMedia 返回的流

    我已将 getUserMedia 返回的流引导到
  • 通过 POP3 自动检查退回的电子邮件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能推荐可以检查退回邮件以及退回原因的软件或 NET 库 我收到退回的电子邮件到我可以阅读的 pop3 帐户 我需要它来保持我的用户数据库中不含无效
  • 如何打印pdf.js文档?

    我已经用 pdf js 生成了一个文档 并且它显示正确 我没有打印按钮 如何添加按钮以允许用户打印 我正在使用 Chrome 尝试使用 javascript 函数window print 这将打开打印对话框 您必须在 html 中添加一个按
  • 密码验证 REGEX 禁止空格

    密码不能包含空格 必须至少包含一个数字字符 必须包含 1 个大写字母 长度至少为 8 个字符 最多 15 个 这就是我所拥有的 它可以执行除空白规则之外的所有操作 d A Z 8 15 为此添加什么 多谢 语言 c asp RegularE
  • 拨打 USSD 代码?

    当我直接从听筒拨打时 它可以工作 例如 123 获取号码余额 但是 当我尝试在应用程序中执行相同的操作时 我遇到了问题 拨号器中显示的号码缺少结尾 我的应用程序中需要它 我希望我的应用程序应该支持所有 USSD 代码 有没有办法在应用程序中
  • javascript 传递 eval 变量

    我有 eval 函数 它需要从 php 执行 javascript 但我需要传递元素 这样我就可以将鼠标悬停在用户单击的链接上的提示上 var globalEval function globalEval src element if wi
  • 不可变且按值传递

    我有以下代码一个可变的 Person 类 String 以及修改 String 和 Person 实例的方法 class Person int a 8 public int getA return a public void setA in
  • 限制UITextview的行数

    我想知道如何限制用户在编辑 UITextField 时可以输入的行数 不是其他问题中询问的字符数 理想情况下 我想将输入限制为最大值 10 行 我需要从哪里开始 我是否用某种方法来做到这一点 在 BOOL textViewShouldBeg
  • SpelEvaluationException:EL1007E:(位置43):在空值上找不到字段或属性“组”

    我已经为我的 Web 应用程序完全配置了 SPRING METHOD 安全性 启用 PRE POST 注释 然而最近我遇到了一个奇怪的问题 总结如下 POJOS总结 User Class public class User int id S
  • Ninject 和静态类 - 如何?

    我有一个静态类 我需要向其中注入一些实例 静态类可以有静态构造函数 但它必须是无参数的 那么 我该如何向其中注入一些东西呢 我不想创建一个单身人士 我希望有一个静态类 并且它的方法之一对应该注入的实例进行操作 下面是我需要的示例 publi
  • 确定在 UIActivityViewController 中单击了哪个图标

    使用 社交 框架 当呈现显示所有常用社交媒体图标的模态 UIActivityViewController 时 有没有办法准确找出用户单击了哪个图标 意思是 如果他们选择 Twitter Facebook 邮件 消息等呢 我期望可能在文档中看
  • 使用情节提要中的选项卡控制器以编程方式打开视图

    我有一个故事板 其中包含以下视图 场景 登录屏幕 TabBarController 有 4 个选项卡 库 工作流程 设置和下载 基于通过单击按钮 登录 的用户登录 我以编程方式加载选项卡栏控制器 始终使用以下代码的第一个选项卡 Librar
  • Aestan 托盘菜单错误 [重复]

    这个问题在这里已经有答案了 我在Windows XP中安装了wamp服务器2 2e 当我启动 wamp 服务器时 它显示 Windows 错误 Aestan 托盘菜单遇到问题 需要关闭 对于给您带来的不便 我们深表歉意 任何人都可以建议如何
  • @DynamicInsert @DynamicUpdate 不起作用?

    我正在使用休眠4 当我使用 org hibernate annotations Entity dynamicInsert true dynamicUpdate true selectBeforeUpdate true 有用 但是 我发现它们
  • 服务器和客户端应用程序之间的推送通知机制

    我正在使用 C 开发一个桌面应用程序 它通过 WCF Web 服务与服务器进行通信 它应该是一种同步应用程序 这意味着当我对客户端应用程序进行一些更改时 我也应该立即更新服务器 这很容易使用服务调用 但也应该提供这种机制 反之亦然 服务器上
  • python matplotlib:如何自动将图形保存为.fig格式?

    通过 python matplotlib 模块 我们可以使用 pylab savefig 函数来保存图形 然而 这个函数似乎不能用于保存 fig 格式的图形 fig 格式是 matlab 图形格式 使用 fig格式 我们可以调整 修改数字
  • Django 无法删除数据库:psycopg2.OperationalError:无法删除当前打开的数据库

    每当我尝试通过 manage py 运行 Django 测试时 测试都会运行良好 但是最后当 Django 销毁数据库时 会发生以下错误 Destroying test database for alias default Tracebac