Postgres pg_dump & pg_restore

Cette rubrique explique comment créer une sauvegarde de votre base de données Lakebase à l’aide de l’utilitaire Postgres pg_dump et comment restaurer une sauvegarde à l’aide pg_restorede .

Quand utiliser pg_dump &pg_restore

Utilisez pg_dump et pg_restore pour les besoins en matière de reprise d’activité et de continuité d’activité, ou lorsque vous devez stocker des sauvegardes complètes en dehors de Lakebase. Cette méthode fournit des exportations de base de données complètes qui peuvent être stockées indépendamment et restaurées sur n’importe quel système compatible Postgres.

Pour une migration qui maintient la cible à jour jusqu’à la bascule, utilisez plutôt la réplication logique. Pour comparer les façons de transférer des données dans et hors de Lakebase, voir Déplacer des données dans et hors de Lakebase.

Conditions préalables

Avant de commencer, vérifiez que :

  • pg_dump et pg_restore sont installés. Vous pouvez vérifier en exécutant pg_dump -V.
  • Vous utilisez les dernières versions de pg_dump et pg_restore.
  • La version du client correspond à la version Postgres de votre projet Lakebase.
  • Projet Lakebase avec un rôle Postgres configuré

Note

Nous vous recommandons d’utiliser l’authentification par mot de passe Postgres native lors de l’utilisation pg_dump et pg_restore. Les mots de passe Postgres natifs n’expirent pas toutes les heures comme les jetons OAuth, ce qui les rend mieux adaptés aux opérations de sauvegarde et de restauration. Pour plus d’informations sur les méthodes d’authentification, consultez la vue d’ensemble de l’authentification.

Installer pg_dump et pg_restore

Si vous n’avez pas installé les utilitaires pg_dump et pg_restore localement, installez-les sur votre plateforme préférée.

Windows: Installez PostgreSQL à l’aide du programme d’installation officiel à partir de postgresql.org. Les pg_dump utilitaires et pg_restore les utilitaires sont installés par défaut et se trouvent dans le répertoire bin PostgreSQL.

Macos: Installez PostgreSQL à l’aide de Homebrew :

brew install postgresql

Linux (Ubuntu/Debian) :

sudo apt-get install postgresql-client

Docker : Exécutez pg_dump en utilisant un conteneur Docker Postgres :

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

Créer une sauvegarde avec pg_dump

Pour créer une sauvegarde de base de données localement :

  1. Accédez à l’application Lakebase en cliquant sur le sélecteur d’applications en haut à droite de votre espace de travail.

  2. Sélectionnez votre projet.

  3. Cliquez sur Se connecter pour ouvrir le mode de connexion de base de données.

  4. Sélectionnez un rôle Postgres dans la liste déroulante (nous vous recommandons d’utiliser un rôle Postgres natif avec l’authentification par mot de passe).

  5. Copiez la chaîne de connexion.

    Votre chaîne de connexion ressemble à ceci :

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Créez une sauvegarde de votre base de données Lakebase en exécutant la commande suivante pg_dump :

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

    Après avoir ajouté la chaîne de connexion de votre base de données Lakebase et un nom de fichier de sauvegarde, la commande s'affiche comme suit :

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

arguments de commande pg_dump

La pg_dump commande inclut ces arguments :

  • -Fc: envoie la sortie à une archive de format personnalisé adaptée à l’entrée dans pg_restore.
  • -v : fonctionne pg_dump en mode détaillé, ce qui vous permet de surveiller ce qui se passe pendant l’opération de vidage.
  • -d: spécifie la chaîne de connexion pour votre base de données Lakebase.
  • -f <dump_file_name> : nom du fichier de vidage. Il peut s’agir de n’importe quel nom que vous choisissez (par exemple). mydumpfile.bak

Restaurer une sauvegarde avec pg_restore

Pour restaurer une base de données à l’aide de l’utilitaire pg_restore à partir d’un fichier de sauvegarde créé à l’aide pg_dumpde :

  1. Créez un projet Lakebase.

  2. Créez une base de données portant le même nom que celle que vous avez sauvegardée.

  3. Accédez à l’application Lakebase en cliquant sur le sélecteur d’applications en haut à droite de votre espace de travail.

  4. Sélectionnez votre projet, puis cliquez sur Se connecter pour ouvrir le mode de connexion de base de données.

  5. Sélectionnez un rôle Postgres dans la liste déroulante (nous vous recommandons d’utiliser un rôle Postgres natif avec l’authentification par mot de passe).

  6. Copiez la chaîne de connexion.

    Votre chaîne de connexion ressemble à ceci :

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Restaurez vos données dans la base de données cible dans Lakebase avec pg_restore:

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

    Après avoir ajouté votre chaîne de connexion de base de données Lakebase et le nom du fichier de vidage, votre commande ressemble à ceci :

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

arguments de commande pg_restore

La pg_restore commande inclut ces arguments :

  • -v : fonctionne pg_restore en mode détaillé, ce qui vous permet de surveiller ce qui se passe pendant l’opération de restauration.
  • -d: spécifie la base de données Lakebase à laquelle se connecter. La valeur est une chaîne de connexion de base de données Lakebase.
  • <dump_file_name>: nom du fichier de vidage que vous avez créé avec pg_dump.

Exemple complet

L’exemple suivant montre comment les données sont vidées à partir d’une base de données source nommée databricks_postgres dans un projet Lakebase et restaurées dans une base de données dans un databricks_postgres autre projet Lakebase.

Avant d’effectuer cette procédure :

  • Un nouveau projet Lakebase a été créé pour la base de données de destination (qui inclut la base de données par défaut databricks_postgres )
  • Les chaînes de connexion pour les bases de données source et de destination ont été collectées :
    • Source :postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Destination :postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Procédure de sauvegarde et de restauration :

# 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

Exporter uniquement le schéma

Un dump limité au schéma copie les définitions de tables, les index et les contraintes sans aucune donnée de ligne. Utilisez-le lorsque vous avez besoin de la structure d’une base de données dans une nouvelle cible mais pas de son contenu.

La raison la plus courante est de préparer une base de données cible pour la réplication logique. La réplication logique copie les données, pas le schéma : les tables dans une publication doivent déjà exister sur l’abonné avec les mêmes noms et colonnes avant le début de la réplication, et chaque table cible doit être vide pour que la copie initiale n’échoue pas sur des clés dupliquées. Un export et un rechargement du schéma seul sont généralement plus rapides et moins sujets aux erreurs que de recréer les tables à la main.

  1. Exportez uniquement le schéma de la base de données source. L’option --schema-only exclut les données de ligne, --no-owner ignore les déclarations de propriété pour des rôles qui pourraient ne pas exister sur la cible, --no-privileges ignore les droits qui pourraient ne pas s’appliquer à la cible, et --no-publications et --no-subscriptions maintiennent la configuration de réplication de la source hors de la cible :

    pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sql
    
  2. Examinez le fichier de vidage et commentez toute déclaration que la cible ne prend pas en charge, comme les paramètres ou extensions spécifiques au fournisseur. Mettez une ligne en commentaire en ajoutant -- au début.

    Si vous répliquez un grand jeu de données, envisagez également de supprimer les instructions CREATE INDEX avant de charger le schéma. Construire des index lors de la copie initiale ralentit la copie initiale de réplication. Conservez les instructions supprimées et recréez les index après la fin de la copie initiale.

  3. Chargez le schéma dans la base de données cible avec psql:

    psql "<target_connection_string>" < schema_dump.sql
    

    Vérifiez que les tables ont été créées :

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