【问题标题】:Why do django migrations temporarily take disk space?为什么 django 迁移会暂时占用磁盘空间?
【发布时间】:2023-03-12 03:12:01
【问题描述】:

设置:

  1. Django (2.2.18) 和 Postgres (9.5) 在一个服务器,同一个磁盘中。
  2. 迁移正在更改 1 个表(添加和删除字段)。

我不确定我的问题是否正确,但我在应用迁移时遇到了上述设置的问题。错误来自 psycopg2:

DiskFull: could not extend file "base/167296/1842042": wrote only 4096 of 8192 bytes at block 161
HINT:  Check free disk space.

当前磁盘使用量为 20G 中的 14G。我们通过删除一些文件并再次运行迁移解决了这个问题。我们观察到磁盘使用量暂时增加到 20G 的 96% 左右,然后又回到 14G。现在我们需要做点什么,这样问题就不会再发生了。我的问题是:

  • 如果我们将数据库移动到RDS 之类的位置,就够了吗?

我问是因为我不确定是数据库大小暂时膨胀还是 django 在磁盘上创建了临时文件。在第二种情况下,这意味着移动数据库实际上并不能解决问题。

我很感激参考,因为我在 django 文档上找不到任何相关内容(或者我是盲人)。

【问题讨论】:

  • 我不了解 Django。但是像 Postgres 这样的 DBMS 使用事务。简而言之,它们将一堆操作绑定在一起,就像一个大操作,要么完全执行,要么根本不执行。为此,需要保留不同的日志以撤消已经完成的更改,或者如果它们尚未完全完成则重做它们。这些日志当然(暂时)需要空间。取决于在交易中完成了多少,这可能是相当大的。并且可能还需要临时将一些数据刷新到磁盘以进行某些操作。所以你的观察并不令人惊讶。

标签: django postgresql django-migrations


【解决方案1】:

请参考https://stackoverflow.com/a/33769195/6733421

如上所述,如果您在添加的新字段中有任何默认值或非空约束,PostgreSQL 不会执行该操作。因此,您可以删除默认值、约束并创建列。之后按照上述链接中的说明添加它们。

关于 RDS 问题, 您可以使用 2 种类型。 RDS PostgresRDS Aurora

RDS Aurora 有一个无服务器选项。如果你选择那个,你真的不需要担心存储空间

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2015-03-07
    • 2020-02-10
    • 2011-04-30
    • 2020-10-28
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多