Django的“dumpdata”还是Postgres的“pg_dump”?

15

我不确定这个问题是否应该在数据库管理员部分或者这里发布,请告诉我如果我错了。

我有一个基于Django的网站,变化不大。如果需要重新部署或者数据库损坏了,我使用python manage.py dumpdata --all --indent=2 > backup.json备份数据,并通过loaddata重新加载数据(我知道当没有排除authcontent_types时发生完整性错误)。

由于我在后端使用PostgreSQL,对我来说使用pg_dump, 然后在遇到故障或需要重新部署时使用pg_restore是"最佳实践"还是更加明智?

所以dumpdata会转储与选定的应用程序(和/或模型)相关联的所有数据,而pg_dump执行db的完整转储。这是相同的吗,还是我错过了某些基本差异(请注意,我对DBA毫无经验)?

我应该选择哪个选项,为什么?

1个回答

13

在IT技术中,使用pg_dump而不是dumpdata是最佳实践且更明智的选择。

有许多原因支持这种做法:

  • pg_dump比dumpdata更快,输出更紧凑(特别是使用-Fc选项)。

  • 使用pg_restore将数据重新导入数据库也比django的loaddata更快。

  • pg_restore在任何postgres安装中都可用,但需要安装django及其依赖项。

  • 最后但并非最不重要的一点是,pg_dump/pg_restore不会出现您提到的完整性错误。

通常,pg_dump用于转储整个数据库,但-t选项允许您一次转储一个或多个表。


已经注意到了。我已经编写了一个使用pg_dump每小时执行备份的脚本。由于我的数据库非常小(约30MB),所以我没有注意到主要性能差异。谢谢你的回答。 - Keenan Lawrence
2
欢迎您,如果您经常进行数据备份,请考虑使用WAL归档。https://www.postgresql.org/docs/9.2/static/continuous-archiving.html - e4c5
只是文本的增量,对吗?我认为对于二进制文件来说,是整个文件。 - e4c5
是的,但差异仍然会很大,因为对于每个更新的行,git将存储以-为前缀的旧记录和以+为前缀的新记录。 - e4c5
啊,我明白了!谢谢你的解答和耐心等待。我会实现WAL归档并试一试。感谢您的建议。 - Keenan Lawrence
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接