快速捕获您的本地Postgres数据库的快照。
项目描述
数据库快照、列表和恢复
快速捕获您的本地Postgres数据库的快照。
这是什么?
DSLR是一个工具,允许您在编写数据库迁移、切换分支或操作SQL时快速创建和恢复数据库快照。
它旨在成为Stellar的精神继承者。
重要: DSLR仅适用于开发使用。不建议在生产数据库上使用DSLR。
性能
DSLR在快照方面比标准的pg_dump
/pg_restore
方法快得多。
与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的export
和import
快照命令需要pg_dump
和pg_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速度的主要来源。
这意味着创建快照只是使用主数据库作为模板创建一个新的数据库。还原快照只是删除主数据库并使用快照数据库作为模板创建一个新的数据库。如此类推。
贡献者
许可
MIT
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分布
构建分布
DSLR-0.4.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 32d132628de5767ed3fe2bfdd755374dd76da1fbe3b0b56c4c489ced1365e8f5 |
|
MD5 | 56c9e147c0b21d8028aec1b9250940c8 |
|
BLAKE2b-256 | 121077e0c0ae0f645b395deff936a44c151f9bae3c04835cafdfdfa5eeb7c557 |