データベースのスナップショット、一覧表示、および復元
ローカルのPostgresデータベースのスナップショットを超高速で取得します。
これは何ですか?
DSLRは、データベースのマイグレーション作業中、ブランチを切り替えるとき、またはSQLを操作するときに、 素早くデータベースのスナップショットを取得および復元できるツールです。
これはStellarの精神的な後継ツールを目指しています。
重要: DSLRは開発用途専用です。 本番環境のデータベースでの使用は推奨されません。
パフォーマンス
DSLRは、標準のpg_dump/pg_restoreを使ったスナップショット方式よりもはるかに高速です。
DSLRは、スナップショット作成時に8倍、スナップショット復元時に3倍速く、pg_dump/pg_restore方式より優れています。
テスト手法
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
各コマンドを3回実行し、平均値をグラフにプロットしました。以下は生データです:
| コマンド | 実行回数 | 実行時間(秒) | | ------------- | ------- | ------------------------ | | dslr snapshot | 1 | 4.797 | | | 2 | 4.650 | | | 3 | 2.927 | | dslr restore | 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, or psycopg
pipxを使用してインストール
pipx install DSLR[psycopg2] # or psycopg2-binary, or psycopg
uvを使用してインストール
uv tool install 'DSLR[psycopg2]' # or psycopg2-binary, or psycopg
注意: DSLRの
exportおよびimportスナップショットコマンドはpg_dumpと
pg_restoreがPATHに存在する必要があるため、これらのコマンドを使用するには
PostgresのCLIユーティリティが必要です。
シェル補完
Bash
これを
~/.bashrcに追加してください:eval "$(_DSLR_COMPLETE=bash_source dslr)"
Zsh
Add this to
~/.zshrc:eval "$(_DSLR_COMPLETE=zsh_source dslr)"
Fish
これを
~/.config/fish/completions/dslr.fish に追加してください:eval (env _DSLR_COMPLETE=fish_source dslr)
これは下記のアクティベーションスクリプト方式で使用されるのと同じファイルです。Fishでは、おそらく常にその方法を使う方が簡単です。
evalを使用すると、シェルが起動するたびにコマンドが呼び出され評価されるため、シェルの応答速度が遅くなることがあります。速度を上げるには、生成されたスクリプトをファイルに書き込み、それをソースしてください。
Bash
スクリプトをどこかに保存します。
_DSLR_COMPLETE=bash_source dslr > ~/.dslr-complete.bash
~/.bashrc ファイルをソースしてください。
. ~/.dslr-complete.bash
Zsh
Save the script somewhere.
_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
非対話型シェルで既存のスナップショットを強制的に上書きするには、フラグ -y を使用します:
$ dslr snapshot my-first-snapshot -y
Updated snapshot my-first-snapshot
仕組みは?
DSLRはPostgresのテンプレートデータベース機能を使ってデータベースをクローンすることでスナップショットを取得します。これがDSLRの高速性の主な要因です。
つまり、スナップショットの取得はメインデータベースをテンプレートとして新しいデータベースを作成するだけです。スナップショットの復元はメインデータベースを削除し、スナップショットデータベースをテンプレートとして新しいデータベースを作成するだけです。これを繰り返します。
コントリビューター
ライセンス
MIT
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-01 ---