Pular para o conteúdo principal

Postgres pg_dump e pg_restore

Este tópico descreve como criar um backup do seu banco de dados Lakebase usando os utilitários Postgres pg_dump e como restaurar um backup usando pg_restore.

Quando usar pg_dump e pg_restore​

Use pg_dump e pg_restore para requisitos de recuperação de desastres e continuidade de negócios, ou quando você precisar armazenar backups completos fora do Lakebase. Este método fornece exportações completas do banco de dados que podem ser armazenadas independentemente e restauradas em qualquer sistema compatível com Postgres.

Para uma migração que mantém o destino atualizado até a transição, utilize replicação lógica. Para comparar as formas de mover dados para dentro e para fora da Lakebase, consulte Mover dados para dentro e para fora da Lakebase.

Pré-requisitos​

Antes de começar, certifique-se de que:

  • pg_dump e pg_restore estão instalados. Você pode verificar executando pg_dump -V.
  • Você está usando as versões mais recentes de pg_dump e pg_restore.
  • A versão do cliente corresponde à versão do Postgres do seu projeto Lakebase.
  • Um projeto Lakebase com uma função Postgres configurada
nota

Recomendamos o uso da autenticação de senha nativa do Postgres ao usar pg_dump e pg_restore. As senhas nativas do Postgres não expiram a cada hora como os tokens OAuth, o que as torna mais adequadas para operações de backup e restauração. Consulte a Visão geral da autenticação para obter detalhes sobre os métodos de autenticação.

Instale pg_dump e pg_restore.​

Se você não tiver os utilitários pg_dump e pg_restore instalados localmente, instale-os em sua plataforma preferida.

Windows: Instale o PostgreSQL usando o instalador oficial do postgresql.org. Os utilitários pg_dump e pg_restore são instalados por default e podem ser encontrados no diretório bin PostgreSQL .

macOS: Instale o PostgreSQL usando o Homebrew:

Bash
brew install postgresql

Linux (Ubuntu/Debian):

Bash
sudo apt-get install postgresql-client

Docker: execução pg_dump usando um contêiner Postgres Docker :

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

Crie um backup com pg_dump​

Para criar um backup do banco de dados localmente:

  1. Navegue até o aplicativo Lakebase clicando no seletor de aplicativos no canto superior direito do seu workspace.

  2. Selecione seu projeto.

  3. Clique em Conectar para abrir a janela de conexão com o banco de dados.

  4. Selecione uma função do Postgres na dropdown (recomendamos usar uma função nativa do Postgres com autenticação por senha).

  5. Copie as cadeias de conexão.

    Suas strings de conexão são semelhantes a estas:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
  6. Crie um backup do seu banco de dados Lakebase executando o seguinte comando pg_dump :

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

    Após adicionar as strings de conexão do seu banco de dados Lakebase e o nome do arquivo de despejo, seu comando ficará assim:

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

argumentos do comando pg_dump​

O comando pg_dump inclui os seguintes argumentos:

  • -Fc: Envia a saída para um arquivo de formato personalizado adequado para entrada em pg_restore.
  • -v: execução pg_dump em modo detalhado, permitindo monitorar o que acontece durante as operações de dump.
  • -dEspecifica as strings de conexão para seu banco de dados Lakebase.
  • -f <dump_file_name>: O nome do arquivo de despejo. Pode ser qualquer nome que você escolher (por exemplo, mydumpfile.bak).

Restaure um backup com pg_restore​

Para restaurar um banco de dados usando as utilidades pg_restore a partir de um arquivo de backup criado usando pg_dump:

  1. Crie um novo projeto no Lakebase.

  2. Crie um banco de dados com o mesmo nome daquele que você fez backup.

  3. Navegue até o aplicativo Lakebase clicando no seletor de aplicativos no canto superior direito do seu workspace.

  4. Selecione seu projeto e clique em Conectar para abrir a janela de conexão com o banco de dados.

  5. Selecione uma função do Postgres na dropdown (recomendamos usar uma função nativa do Postgres com autenticação por senha).

  6. Copie as cadeias de conexão.

    Suas strings de conexão são semelhantes a estas:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
  7. Restaure seus dados para o banco de dados de destino no Lakebase com pg_restore:

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

    Após adicionar as strings de conexão do seu banco de dados Lakebase e o nome do arquivo de despejo, seu comando ficará assim:

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

argumentos do comando pg_restore​

O comando pg_restore inclui os seguintes argumentos:

  • -v: execução pg_restore em modo detalhado, permitindo monitorar o que acontece durante as operações de restauração.
  • -d: Especifica o banco de dados Lakebase ao qual se conectar. O valor é uma string de conexão com o banco de dados Lakebase.
  • <dump_file_name>: O nome do arquivo de despejo que você criou com pg_dump.

Exemplo completo​

O exemplo a seguir mostra como os dados são extraídos de um banco de dados de origem chamado databricks_postgres em um projeto Lakebase e restaurados em um banco de dados databricks_postgres em outro projeto Lakebase.

Antes de realizar este procedimento:

  • Um novo projeto Lakebase foi criado para o banco de dados de destino (que inclui o banco de dados default databricks_postgres ).
  • Foram coletadas as strings de conexão para os bancos de dados de origem e destino:
    • Fonte: 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

Procedimento de backup e restauração:

Bash
# 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

Despejar apenas o esquema​

Um dump apenas de esquema copia definições de tabela, índices e restrições sem quaisquer dados de linha. Use-o quando precisar da estrutura de um banco de dados em um novo destino, mas não de seu conteúdo.

O motivo mais comum é preparar um banco de dados de destino para replicação lógica. A replicação lógica copia os dados, não o esquema: as tabelas em uma publicação já devem existir no assinante com os mesmos nomes e colunas antes que a replicação comece, e cada tabela de destino deve estar vazia para que a cópia inicial não falhe devido a chaves duplicadas. Um despejo e recarregamento apenas de esquema geralmente é mais rápido e menos propenso a erros do que recriar as tabelas manualmente.

  1. Despeje apenas o esquema do banco de dados de origem. A opção --schema-only exclui os dados da linha, --no-owner ignora as declarações de propriedade para funções que podem não existir no destino, e --no-privileges ignora as permissões que podem não se aplicar ao destino:

    Bash
    pg_dump --schema-only --no-owner --no-privileges "<source_connection_string>" > schema_dump.sql
  2. Revise o arquivo de despejo e comente quaisquer declarações que o destino não suporte, como parâmetros específicos do provedor ou extensões. Comente uma linha adicionando -- no início.

    Se você estiver replicando um dataset grande, considere também remover as declarações CREATE INDEX antes de carregar o esquema. A criação de índices durante a cópia inicial da replicação reduz a velocidade. Salve as declarações removidas e adicione os índices de volta após a conclusão da cópia inicial.

  3. Carregue o esquema no banco de dados de destino com psql:

    Bash
    psql "<target_connection_string>" < schema_dump.sql

    Confirme se as tabelas foram criadas:

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