跳转到主要内容

Django管理命令,用于使用DATABASES设置备份和恢复PostgreSQL数据库。

项目描述

Django PostgreSQL Copy

该包django-pg-copy提供Django管理命令,用于备份和恢复PostgreSQL数据库。这些命令是为了将生产数据库复制到开发环境中而开发的,以便开发人员可以共享图像或使本地开发数据库保持最新。它也可以用于为不同的分支创建不同的本地数据库,并在调整模型以符合需求后仅创建一个迁移。

我们还与Jenkins一起使用它来自动备份生产环境,并将数据恢复到预发布数据库环境中,这样我们就可以反复测试新迁移,以确保它们在生产环境中运行时能够正常工作。

安装

pip安装django-pg-copy

然后,将 'pg_copy', 添加到您的 INSTALLED_APPS 列表中。建议在所有环境(开发、生产)中使用,以便您可以使用它对数据库的不同实例进行操作。

设置

PG_COPY_BACKUP_PATH = 'db_backup'

默认情况下,PostgreSQL 文件备份将存储在运行命令的目录 db_backup 中。此设置将覆盖该位置。

如果路径位于您的版本控制仓库中,建议将此路径添加到 .gitignore 文件中。

参数

  • --database:指定要备份或从其恢复的数据库的设置。
  • --db-override:一个用于覆盖发送给 psql 的 db 参数的值。
  • --host-override:一个用于覆盖发送给 psql 的 host 参数的值。
  • --pg-home:如果 PostgreSQL 安装不在您的路径上,则指定 PostgreSQL 安装路径。
  • --file-f:备份到的文件名或恢复的文件名。
  • --jobs-j:要运行的并行作业数。这可以显著提高备份和恢复的速度。在备份时,必须使用 --directory 选项。小心! 这也将创建多个数据库连接,可能会降低您的数据库速度。
  • --directory-d:从目录恢复。当使用时将覆盖 --file

pg_backup 仅有的备份参数

  • --ignore-table-i:在备份过程中完全排除表。可以传递多个表:-i bigtable1 -i bigtable2
  • --exclude-table-data-e:在备份过程中排除表数据。可以传递多个表:-e bigtable1 -e bigtable2

pg_restore 仅有的恢复参数

  • --no-drop:在不执行 DROP OWNED BY 操作的情况下恢复数据库。
  • --no-confirm:在不确认的情况下恢复数据库:小心!不要覆盖您的生产数据库!(问我怎么知道的。)

示例命令

python manage.py pg_backup

使用 DATABASESdefault 设置在 ./db_backup/ 目录(或使用 PG_COPY_BACKUP_PATH 指定的目录)中创建一个名为 [timestamp].sqlc 的备份文件,使用由 manage.py 解析的默认 Django 设置文件。

python manage.py pg_backup --directory=/tmp/pg_backup --jobs=8

此命令将在 /tmp/backup 创建一个备份目录,使用 8 个并行作业和数据库连接。这通常要快得多。

python manage.py pg_backup --settings=config.settings.production --database=default --filename=my_backup.sqlc

此命令将在与 manage.py 相同的目录中创建一个名为 my_backup.sqlc 的备份文件,使用 DATABASESdefault 设置和位于 config/settings/production.py 的 Django 设置文件。

python manage.py pg_backup -i bigtable1 -i bigtable2

这将与前面的命令执行相同,但会省略名为 bigtable1bigtable2 的表。

python manage.py pg_backup -e bigtable1 -e bigtable2

这将与前面的命令执行相同,但包括名为 bigtable1bigtable2 的表的结构,而不包含任何数据。

python manage.py pg_restore

此命令将在 PG_COPY_BACKUP_PATH 中列出可以恢复的备份文件。选择一个备份文件后,它将确认用户是否想要覆盖目标数据库,显示将从中覆盖哪些服务器和数据库的设置。以下是它将看起来像什么

(venv) [django-project]$ ./manage.py pg_restore
There are 8 backup files in '/var/dev/username/django-project/db_backup'. Which would you like to restore?
1: 2020-05-27-13-33-38.sqlc
2: 2020-05-10-09-07-45.sqlc
3: 2020-05-11-13-05-49.sqlc
4: 2020-07-14-15-21-22.sqlc
5: 2020-05-15-08-31-59.sqlc
6: 2020-06-11-13-11-00.sqlc
7: 2020-06-02-13-28-09.sqlc
8: 2020-05-27-14-54-15.sqlc
Enter number of the file to restore: 4
About to restore 'django_project_db' on host 'localhost' from the file:
'/var/dev/username/django-project/db_backup/2020-07-14-15-21-22.sqlc'.
THIS WILL OVERWRITE THE DATABASE.
Type "yes" to start the restore [no]: yes

python manage.py pg_restore --filename=my_file.sqlc --no-confirm

此命令将读取 my_file.sqlc 文件,并跳过用户想要覆盖目标数据库的确认。

python manage.py pg_restore --directory=/tmp/pg_backup --jobs=8

此命令将使用 8 个并行作业和数据库连接从 /tmp/pg_backup 目录恢复。

已知问题

pg_restore 期间显示的错误

在恢复过程中,PostgreSQL的pg_restore命令可能会输出一些警告和错误。我还没有找到可以使这些警告消失的命令行选项,但如果你阅读它们,它们很可能可以忽略。以下是一些这些错误可能的样子

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 1; 3079 13792 EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
    Command was: DROP EXTENSION IF EXISTS plpgsql;

pg_restore: [archiver (db)] Error from TOC entry 6; 2615 2200 SCHEMA public postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of schema public
    Command was: DROP SCHEMA IF EXISTS public;

pg_restore: [archiver (db)] could not execute query: ERROR:  schema "public" already exists
    Command was: CREATE SCHEMA public;

这些可能是未使用的扩展的错误,或者关于已经存在的默认架构的警告。

发布说明

发布说明可在GitHub上查看.

维护者和贡献者

该软件包由 Wharton Research Data Services 的员工维护。我们很高兴 Wharton School 允许我们为开源项目做出贡献。我们根据项目的需要添加功能,并尽可能跟上问题和拉取请求。由于时间限制(我们的全职工作!),没有拉取请求的功能请求可能无法实现,但我们始终欢迎新想法,并对贡献者和用户表示感谢。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django_pg_copy-1.2.0.tar.gz (9.0 kB 查看哈希)

上传时间: 源代码

构建分发

django_pg_copy-1.2.0-py3-none-any.whl (9.8 kB 查看哈希)

上传时间: Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面