跳转到主要内容

快速捕获您的本地Postgres数据库的快照。

项目描述



The DSLR logo


PyPI version PyPI Supported Python Versions GitHub Actions (Code quality and tests)

A terminal showing DSLR's command line interface.


数据库快照、列表和恢复

快速捕获您的本地Postgres数据库的快照。

这是什么?

DSLR是一个工具,允许您在编写数据库迁移、切换分支或操作SQL时快速创建和恢复数据库快照。

它旨在成为Stellar的精神继承者。

重要: DSLR仅适用于开发使用。不建议在生产数据库上使用DSLR。

性能

DSLR在快照方面比标准的pg_dump/pg_restore方法快得多。

A chart comparing the execution time between DSLR and pg_dump/pg_restore. For snapshot and restore, DSLR took 4.125 seconds and 4.431 seconds respectively. pg_dump/pg_restore took 36.602 seconds and 13.257 seconds respectively.

pg_dump/pg_restore方法相比,DSLR创建快照的速度快8倍,恢复快照的速度快3倍。

测试方法

我使用Docker启动了Postgres 12.3,创建了一个测试数据库,并使用此脚本填充了1GB的随机数据

CREATE TABLE large_test (num1 bigint, num2 double precision, num3 double precision);

INSERT INTO large*test (num1, num2, num3)
SELECT round(random() * 10), random(), random() \_ 142
FROM generate_series(1, 20000000) s(i);

我使用以下命令来测量执行时间


time dslr snapshot my-snapshot
time dslr restore my-snapshot
time pg_dump -Fc -f export.dump
time pg_restore --no-acl --no-owner export.dump

我运行了每个命令三次,并在图表中绘制了平均值。

以下是原始数据

命令 运行 执行时间(秒)
dslr快照 1 4.797
2 4.650
3 2.927
dslr恢复 1 5.840
2 4.122
3 3.331
pg_dump 1 37.345
2 36.227
3 36.233
pg_restore 1 13.304
2 13.148
3 13.320

安装


pip install DSLR psycopg2 # or psycopg2-binary

使用pipx安装


pipx install DSLR[psycopg2] # or psycopg2-binary

注意:DSLR的exportimport快照命令需要pg_dumppg_restore在您的PATH中存在,因此如果您想使用这些命令,则需要Postgres CLI工具。

Shell自动补全

Bash

将以下内容添加到~/.bashrc

eval "$(_DSLR_COMPLETE=bash_source dslr)"

Zsh

将以下内容添加到~/.zshrc

eval "$(_DSLR_COMPLETE=zsh_source dslr)"

Fish

将以下内容添加到~/.config/fish/completions/dslr.fish

eval (env _DSLR_COMPLETE=fish_source dslr)

这是下面激活脚本方法中使用的相同文件。对于Fish来说,可能总是使用这种方法更简单。

使用eval意味着命令在每次启动shell时都会被调用并评估,这可能会延迟shell的响应速度。为了加快速度,请将生成的脚本写入文件,然后源文件。

Bash

将脚本保存到某处。

_DSLR_COMPLETE=bash_source dslr > ~/.dslr-complete.bash

在~/.bashrc中源文件。

. ~/.dslr-complete.bash

Zsh

将脚本保存到某处。

_DSLR_COMPLETE=zsh_source dslr > ~/.dslr-complete.zsh

在~/.zshrc中源文件。

. ~/.dslr-complete.zsh

Fish

将脚本保存到~/.config/fish/completions/foo-bar.fish

_DSLR_COMPLETE=fish_source dslr > ~/.config/fish/completions/dslr.fish

配置

您可以通过几种方式告诉DSLR要快照哪个数据库

DATABASE_URL

如果设置了DATABASE_URL环境变量,DSLR将使用它来连接到您的目标数据库。

export DATABASE_URL=postgres://username:password@host:port/database_name

dslr.toml

如果当前目录中存在dslr.toml文件,DSLR将从那里读取其设置。DSLR将优先考虑此设置而不是环境变量。

url = 'postgres://username:password@host:port/database_name'

--url选项

最后,您可以通过--url选项显式传递连接字符串。这将覆盖上述所有设置。

用法

$ dslr snapshot my-first-snapshot
Created new snapshot my-first-snapshot

$ dslr restore my-first-snapshot
Restored database from snapshot my-first-snapshot

$ dslr list

  Name                Created            Size
 ─────────────────────────────────────────────
  my-first-snapshot   2 minutes ago   3253 kB

$ dslr rename my-first-snapshot fresh-db
Renamed snapshot my-first-snapshot to fresh-db

$ dslr delete some-old-snapshot
Deleted some-old-snapshot

$ dslr export my-feature-test
Exported snapshot my-feature-test to my-feature-test_20220730-075650.dump

$ dslr import snapshot-from-a-friend_20220730-080632.dump friend-snapshot
Imported snapshot friend-snapshot from snapshot-from-a-friend_20220730-080632.dump

它如何工作?

DSLR通过使用Postgres的模板数据库功能来克隆数据库以获取快照。这是DSLR速度的主要来源。

这意味着创建快照只是使用主数据库作为模板创建一个新的数据库。还原快照只是删除主数据库并使用快照数据库作为模板创建一个新的数据库。如此类推。

贡献者

Contributors

许可

MIT

项目详情


下载文件

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

源代码分布

DSLR-0.4.0.tar.gz (12.5 kB 查看哈希值)

上传时间

构建分布

dslr-0.4.0-py3-none-any.whl (11.6 kB 查看哈希值)

上传时间 Python 3

由...

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