Postgres pg_dump y pg_restore

En este tema se describe cómo crear una copia de seguridad de la base de datos de Lakebase mediante la utilidad Postgres pg_dump y cómo restaurar una copia de seguridad mediante pg_restore.

Cuándo usar pg_dump y pg_restore

Use pg_dump y pg_restore para los requisitos de recuperación ante desastres y continuidad empresarial, o cuando necesite almacenar copias de seguridad completas fuera de Lakebase. Este método proporciona exportaciones completas de bases de datos que se pueden almacenar de forma independiente y restaurarse en cualquier sistema compatible con Postgres.

Para una migración que mantenga el destino actualizado hasta la conmutación, usa replicación lógica en su lugar. Para comparar las formas de mover datos dentro y fuera de Lakebase, consulta Mover datos dentro y fuera de Lakebase.

Prerrequisitos

Antes de comenzar, asegúrese de que:

  • pg_dump y pg_restore están instalados. Para comprobarlo, ejecute pg_dump -V.
  • Usa las versiones más recientes de pg_dump y pg_restore.
  • La versión del cliente coincide con la versión de Postgres del proyecto de Lakebase.
  • Un proyecto de Lakebase con un rol de Postgres configurado

Nota:

Se recomienda usar la autenticación de contraseña nativa de Postgres al usar pg_dump y pg_restore. Las contraseñas nativas de Postgres no expiran cada hora, como los tokens de OAuth, por lo que son más adecuados para las operaciones de copia de seguridad y restauración. Consulte Introducción a la autenticación para obtener más información sobre los métodos de autenticación.

Instalación de pg_dump y pg_restore

Si no tiene instaladas las pg_dump utilidades y pg_restore localmente, instálelas en su plataforma preferida.

Windows: Instale PostgreSQL mediante el instalador oficial desde postgresql.org. Las pg_dump utilidades y pg_restore se instalan de forma predeterminada y se pueden encontrar en el directorio bin de PostgreSQL.

macOS: Instale PostgreSQL mediante Homebrew:

brew install postgresql

Linux (Ubuntu/Debian):

sudo apt-get install postgresql-client

Docker: Ejecute pg_dump con un contenedor de Docker de Postgres:

docker run --rm postgres:17 pg_dump --version

Creación de una copia de seguridad con pg_dump

Para crear una copia de seguridad de base de datos localmente:

  1. Accede a la app de Lakebase haciendo clic en el selector de aplicaciones en la esquina superior derecha de tu espacio de trabajo.

  2. Seleccione su proyecto.

  3. Haga clic en Conectar para abrir el modal de conexión de base de datos.

  4. Seleccione un rol de Postgres en la lista desplegable (se recomienda usar un rol nativo de Postgres con autenticación de contraseña).

  5. Copie la cadena de conexión.

    La cadena de conexión tiene un aspecto similar al siguiente:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Cree una copia de seguridad de la base de datos de Lakebase mediante la ejecución del comando siguiente pg_dump :

    pg_dump -Fc -v -d "<lakebase_database_connection_string>" -f <dump_file_name>
    

    Después de agregar la cadena de conexión de la base de datos de Lakebase y un nombre de archivo de volcado, el comando tiene el siguiente aspecto:

    pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak
    

pg_dump argumentos del comando

El pg_dump comando incluye estos argumentos:

  • -Fc: envía la salida a un archivo de formato personalizado adecuado para la entrada en pg_restore.
  • -v: Ejecuta pg_dump en modo detallado, lo que le permite supervisar lo que sucede durante la operación de volcado.
  • -d: especifica la cadena de conexión de la base de datos de Lakebase.
  • -f <dump_file_name>: el nombre del archivo de volcado. Puede ser cualquier nombre que elija (por ejemplo, mydumpfile.bak).

Restauración de una copia de seguridad con pg_restore

Para restaurar una base de datos mediante la pg_restore utilidad a partir de un archivo de copia de seguridad creado mediante pg_dump:

  1. Cree un nuevo proyecto de Lakebase.

  2. Cree una base de datos con el mismo nombre que la que ha respaldado.

  3. Accede a la app de Lakebase haciendo clic en el selector de aplicaciones en la esquina superior derecha de tu espacio de trabajo.

  4. Seleccione el proyecto y haga clic en Conectar para abrir el modal de conexión de base de datos.

  5. Seleccione un rol de Postgres en la lista desplegable (se recomienda usar un rol nativo de Postgres con autenticación de contraseña).

  6. Copie la cadena de conexión.

    La cadena de conexión tiene un aspecto similar al siguiente:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Restaure los datos en la base de datos de destino en Lakebase con pg_restore:

    pg_restore -v -d "<lakebase_database_connection_string>" <dump_file_name>
    

    Después de agregar la cadena de conexión de la base de datos de Lakebase y el nombre del archivo dump, el comando tiene el siguiente aspecto:

    pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak
    

argumentos del comando pg_restore

El pg_restore comando incluye estos argumentos:

  • -v: Ejecuta pg_restore en modo detallado, lo que le permite supervisar lo que sucede durante la operación de restauración.
  • -d: especifica la base de datos de Lakebase a la que se va a conectar. El valor es una cadena de conexión de base de datos de Lakebase.
  • <dump_file_name>: el nombre del fichero de volcado de memoria que se creó con pg_dump.

Ejemplo completo

En el ejemplo siguiente se muestra cómo se vuelcan los datos de una base de datos de origen denominada databricks_postgres en un proyecto de Lakebase y se restauran en la base de datos databricks_postgres de otro proyecto de Lakebase.

Antes de realizar este procedimiento:

  • Se creó un nuevo proyecto de Lakebase para la base de datos de destino (que incluye la base de datos predeterminada databricks_postgres )
  • Se recopilaron cadenas de conexión para las bases de datos de origen y destino:
    • Origen:postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Destino:postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Procedimiento de copia de seguridad y restauración:

# Create a directory for the dump
mkdir mydump && cd mydump

# Create the backup
pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak

# Verify the backup file was created
ls
mydatabase.bak

# Restore the backup to the destination database
pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak

Volcar solo el esquema

Un volcado solo de esquema copia definiciones de tablas, índices y restricciones sin ningún dato de fila. Úsala cuando necesites la estructura de una base de datos en un nuevo destino pero no su contenido.

La razón más común es preparar una base de datos objetivo para la replicación lógica. La replicación lógica copia datos, no el esquema: las tablas en una publicación deben existir ya en el suscriptor con los mismos nombres y columnas antes de que comience la replicación, y cada tabla objetivo debe estar vacía para que la copia inicial no falle en claves duplicadas. Un volcado y recarga solo con esquema suele ser más rápido y menos propenso a errores que recrear las tablas a mano.

  1. Volca solo el esquema de la base de datos fuente. La --schema-only opción excluye los datos de fila, --no-owner omite las declaraciones de propiedad de roles que podrían no existir en el destino, --no-privileges omite concesiones que podrían no aplicarse en el destino y --no-publications y --no-subscriptions mantienen la configuración de replicación de la fuente fuera del destino:

    pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sql
    
  2. Revisa el archivo de volcado y comenta cualquier instrucción que el destino no admita, como parámetros específicos del proveedor o extensiones. Convierte una línea en comentario añadiendo -- al principio.

    Si estás replicando un conjunto de datos de gran tamaño, considera también eliminar las instrucciones CREATE INDEX antes de cargar el esquema. Construir índices durante la copia de replicación inicial lo ralentiza. Guarda las sentencias que elimines y vuelve a añadir los índices cuando se complete la copia inicial.

  3. Carga el esquema en la base de datos destino con psql:

    psql "<target_connection_string>" < schema_dump.sql
    

    Confirme que las tablas fueron creadas:

    psql "<target_connection_string>" -c "\dt"