Instantáneas, listado y restauración de bases de datos
Toma instantáneas ultrarrápidas de tus bases de datos locales de Postgres.
¿Qué es esto?
DSLR es una herramienta que te permite tomar y restaurar instantáneas de bases de datos rápidamente cuando estás escribiendo migraciones de bases de datos, cambiando de ramas o experimentando con SQL.
Está pensada para ser una sucesora espiritual de Stellar.
Importante: DSLR está destinada solo para uso en desarrollo. No es recomendable usar DSLR en bases de datos de producción.
Rendimiento
DSLR es mucho más rápido que el enfoque estándar depg_dump/pg_restore para instantáneas.
DSLR es 8 veces más rápido al tomar instantáneas y 3 veces más rápido al restaurarlas en comparación con el enfoque pg_dump/pg_restore.
Metodología de prueba
Inicié Postgres 12.3 usando Docker, creé una base de datos de prueba y la llené con 1GB de datos aleatorios usando este script:
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);
Utilicé los siguientes comandos para medir el tiempo de ejecución:
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
Ejecuté cada comando tres veces y tracé la media en el gráfico.Aquí están los datos sin procesar:
| Comando | Ejecución | Tiempo de ejecución (segundos) | | ------------- | --------- | ------------------------------ | | 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 |
Instalación
pip install DSLR psycopg2 # or psycopg2-binary, or psycopg
Instalar usando pipx
pipx install DSLR[psycopg2] # or psycopg2-binary, or psycopg
Instalar usando uv
uv tool install 'DSLR[psycopg2]' # or psycopg2-binary, or psycopg
Nota: Los comandos de instantánea
export e import de DSLR requieren que pg_dump y
pg_restore estén presentes en su PATH, por lo que necesitará las utilidades CLI de Postgres
si desea usar esos comandos.
Autocompletado en shell
Bash
Agregue esto a
~/.bashrc:eval "$(_DSLR_COMPLETE=bash_source dslr)"
Zsh
Add this to
~/.zshrc:eval "$(_DSLR_COMPLETE=zsh_source dslr)"
Fish
Agrega esto a
~/.config/fish/completions/dslr.fish:eval (env _DSLR_COMPLETE=fish_source dslr)
Este es el mismo archivo utilizado para el método del script de activación a continuación. Para Fish probablemente siempre sea más fácil usar ese método.
Usar eval significa que el comando se invoca y evalúa cada vez que se inicia una shell, lo que puede retrasar la capacidad de respuesta de la shell. Para acelerarlo, escriba el script generado en un archivo y luego ejecútelo con source.
Bash
Guarde el script en algún lugar.
_DSLR_COMPLETE=bash_source dslr > ~/.dslr-complete.bash
Ejecute el archivo en ~/.bashrc.
. ~/.dslr-complete.bash
Zsh
Save the script somewhere.
_DSLR_COMPLETE=zsh_source dslr > ~/.dslr-complete.zsh
Fuente el archivo en ~/.zshrc.
. ~/.dslr-complete.zsh
Fish
Guarde el script en ~/.config/fish/completions/foo-bar.fish:
_DSLR_COMPLETE=fish_source dslr > ~/.config/fish/completions/dslr.fish
Configuración
Puedes indicarle a DSLR de qué base de datos tomar instantáneas de varias maneras:
DATABASE_URL
Si la variable de entorno
DATABASE_URL está configurada, DSLR la utilizará para conectarse
a tu base de datos objetivo.export DATABASE_URL=postgres://username:password@host:port/database_name
dslr.toml
Si existe un archivo dslr.toml en el directorio actual, DSLR leerá sus
configuraciones desde allí. DSLR preferirá esto sobre la variable de entorno.
url = 'postgres://username:password@host:port/database_name'Opción --url
Finalmente, puede pasar explícitamente la cadena de conexión mediante la opción --url.
Esto anulará cualquiera de las configuraciones anteriores.
Uso
$ 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
Para forzar la sobrescritura de una instantánea existente en una consola no interactiva, use la opción -y:
$ dslr snapshot my-first-snapshot -y
Updated snapshot my-first-snapshot¿Cómo funciona?
DSLR toma instantáneas clonando bases de datos usando la funcionalidad de Bases de Datos Plantilla de Postgres. Esta es la principal fuente de la rapidez de DSLR.
Esto significa que tomar una instantánea es simplemente crear una nueva base de datos usando la base de datos principal como plantilla. Restaurar una instantánea es simplemente eliminar la base de datos principal y crear una nueva base de datos usando la base de datos de la instantánea como plantilla. Y así sucesivamente.
Colaboradores
Licencia
MIT
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-01 ---