Compartilhar via


Migrar seu banco de dados PostgreSQL usando despejo e restauração

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

Use pg_dump para extrair um banco de dados PostgreSQL para um arquivo de despejo. O método para restaurar o banco de dados depende do formato do despejo escolhido. Se o despejo for obtido com o formato simples (que é o padrão -Fp, nenhuma opção específica precisa ser especificada), a única opção para restaurá-lo será usando psql, pois gera um arquivo de texto sem formatação. Para os outros três métodos de despejo: personalizado, diretório e tar, deve ser usado pg_restore.

Importante

As instruções e os comandos fornecidos neste artigo foram projetados para serem executados em terminais bash. Isso inclui ambientes como o Subsistema do Windows para Linux (WSL), o Azure Cloud Shell e outras interfaces compatíveis com bash. Verifique se você está usando um terminal bash para seguir as etapas e executar os comandos detalhados neste guia. O uso de um tipo diferente de ambiente de terminal ou shell pode resultar em diferenças no comportamento do comando e pode não produzir os resultados pretendidos.

Neste artigo, nos concentramos nos formatos simples (padrão) e de diretório. O formato de diretório é útil, pois permite que você use vários núcleos para processamento, o que pode aumentar significativamente a eficiência, especialmente para bancos de dados grandes.

O portal do Azure simplifica esse processo por meio do painel Conectar oferecendo comandos pré-configurados que são personalizados para o servidor, com valores substituídos pelos dados do usuário. É importante observar que o painel Conectar só está disponível para o Banco de Dados do Azure para PostgreSQL – Servidor Flexível e não para Servidor Único. Veja como você pode usar este recurso:

  1. Acesse o portal do Azure: primeiro, vá para o portal do Azure e escolha o painel Conectar.

    Captura de tela mostrando o posicionamento do painel Conectar no portal do Azure.

  2. Selecione o banco de dados: no painel Conectar, você encontrará uma lista suspensa dos bancos de dados. Selecione o banco de dados do qual você deseja executar um despejo.

    Captura de tela mostrando a lista suspensa em que um banco de dados específico pode ser escolhido.

  3. Escolha o método apropriado: dependendo do tamanho do banco de dados, você pode escolher entre dois métodos:

    • pg_dump e psql – usando um arquivo de texto singular: ideal para bancos de dados menores, essa opção utiliza um único arquivo de texto para o processo de despejo e restauração.
    • pg_dump e pg_restore – usando vários núcleos: para bancos de dados maiores, esse método é mais eficiente, pois usa vários núcleos para lidar com o processo de despejo e restauração.

    Captura de tela mostrando dois métodos de despejo possíveis.

  4. Copiar e colar comandos: o portal fornece comandos prontos para usar pg_dump e psql ou pg_restore. Esses comandos vêm com valores já substituídos de acordo com o servidor e o banco de dados escolhidos. Copie e cole esses comandos.

Pré-requisitos

Se você estiver usando um Servidor Único ou não tiver acesso ao portal do Servidor Flexível, leia esta página de documentação. Ela contém informações semelhantes às apresentadas no painel Conectar para Servidor Flexível no portal.

Observação

Como os utilitários pg_dump, psql, pg_restore e pg_dumpall dependem de libpq, você pode usar qualquer uma das variáveis de ambiente compatíveis que ele oferece ou pode usar o arquivo de senha para evitar ser solicitado a inserir a senha toda vez que executar qualquer um desses comandos.

Para seguir este guia de instruções, você precisa:

  • Um Servidor de Banco de Dados do Azure para PostgreSQL com regras de firewall para a permissão do acesso.
  • pg_dump, psql, pg_restore e pg_dumpall caso deseje migrar com funções e permissões, utilitários de linha de comando instalados.
  • Decidir sobre o local do despejo: escolha o local do qual você deseja executar o despejo. Isso pode ser feito em vários locais, como uma VM separada, cloud shell (em que os utilitários de linha de comando já estão instalados, mas podem não estar na versão apropriada, portanto, sempre verifique a versão usando, por exemplo, psql --version) ou seu próprio laptop. Sempre tenha em mente a distância e a latência entre o servidor PostgreSQL e o local do qual você está executando o despejo ou a restauração.

Importante

É essencial usar os utilitários pg_dump, psql, pg_restore e pg_dumpall que são da mesma versão principal ou de uma versão principal maior do que o servidor de banco de dados para o qual você está exportando ou importando dados. Não fazer isso pode resultar em migração de dados malsucedida. Se o servidor de destino tiver uma versão principal maior que o servidor de origem, use utilitários que sejam da mesma versão principal ou superior ao servidor de destino.

Observação

É importante estar ciente de que pg_dump pode exportar apenas um banco de dados por vez. Essa limitação se aplica independentemente do método escolhido, seja usando um arquivo singular ou vários núcleos.

Despejando usuários e funções com pg_dumpall -r

pg_dump é usado para extrair um banco de dados PostgreSQL em um arquivo de despejo. No entanto, é crucial entender que pg_dump não despeja definições de funções ou usuários, pois elas são consideradas objetos globais dentro do ambiente PostgreSQL. Para uma migração abrangente, incluindo usuários e funções, você precisa usar pg_dumpall -r. Esse comando permite que você capture todas as informações de função e usuário do seu ambiente PostgreSQL. Se você estiver migrando em bancos de dados no mesmo servidor, fique à vontade para ignorar esta etapa e ir para a seção Criar um novo banco de dados.

pg_dumpall -r -h <server name> -U <user name> > roles.sql

Por exemplo, se você tiver um servidor chamado mydemoserver e um usuário chamado myuser execute o seguinte comando:

pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Se você estiver usando um Servidor Único, seu nome de usuário incluirá o componente de nome de servidor. Portanto, em vez de myuser, use myuser@mydemoserver.

Funções de despejo de um Servidor Flexível

Em um ambiente de Servidor Flexível, medidas de segurança aprimoradas significam que os usuários não têm acesso à tabela pg_authid, que é onde as senhas de função são armazenadas. Essa restrição afeta a forma como você executa um despejo de funções, pois o comando pg_dumpall -r padrão tenta acessar essa tabela para senhas e falha devido à falta de permissão.

Ao despejar funções de um Servidor Flexível, é crucial incluir a opção --no-role-passwords no comando pg_dumpall. Essa opção impede que pg_dumpall tente acessar a tabela pg_authid, que não pode ser lida devido a restrições de segurança.

Para despejar funções de forma bem-sucedida de um Servidor Flexível, use o seguinte comando:

pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql

Por exemplo, se você tiver um servidor chamado mydemoserver e um usuário chamado myuser, execute o seguinte comando:

pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Limpando o despejo de funções

Ao migrar, o arquivo de saída roles.sql pode incluir determinadas funções e atributos que não são aplicáveis ou permitidos no novo ambiente. Veja o que você precisa considerar:

  • Remover atributos que podem ser definidos somente por superusuários: se estiver migrando para um ambiente em que você não tenha privilégios de superusuário, remova atributos como NOSUPERUSER e NOBYPASSRLS do despejo de funções.

  • Excluir usuários específicos do serviço: excluir usuários do serviço de Servidor Único, como azure_superuser ou azure_pg_admin. Eles são específicos para o serviço e serão criados automaticamente no novo ambiente.

Use o seguinte comando sed para limpar o despejo de funções:

sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql

Esse comando exclui linhas que contêm azure_superuser, azure_pg_admin, azuresu, linhas começando com CREATE ROLE replication e ALTER ROLE replication e remove os atributos NOSUPERUSER e NOBYPASSRLS de instruções ALTER ROLE.

Criar um arquivo de despejo que contenha os dados a serem carregados

Para exportar seu banco de dados PostgreSQL existente localmente ou em uma VM para um arquivo de script SQL, execute o seguinte comando em seu ambiente existente:

pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql

Por exemplo, se você tiver um servidor chamado mydemoserver, um usuário chamado myuser e um banco de dados chamado testdb, execute o seguinte comando:

pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql

Se você estiver usando um Servidor Único, seu nome de usuário incluirá o componente de nome de servidor. Portanto, em vez de myuser, use myuser@mydemoserver.

Restaurar os dados no banco de dados de destino

Restaurar funções e usuários

Antes de restaurar seus objetos de banco de dados, verifique se você despejou e limpou corretamente as funções. Se você estiver migrando em bancos de dados no mesmo servidor, o despejo das funções e a restauração delas podem não ser necessários. No entanto, para migrações em diferentes servidores ou ambientes, essa etapa é crucial.

Para restaurar as funções e os usuários no banco de dados de destino, use o seguinte comando:

psql -f roles.sql -h <server_name> -U <user_name>

Substitua <server_name> pelo nome do servidor de destino e <user_name> pelo nome de usuário. Esse comando usa o utilitário psql para executar os comandos SQL contidos no arquivo roles.sql, restaurando efetivamente as funções e os usuários para o banco de dados de destino.

Por exemplo, se você tiver um servidor chamado mydemoserver e um usuário chamado myuser, execute o seguinte comando:

psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser

Se você estiver usando um Servidor Único, seu nome de usuário incluirá o componente de nome de servidor. Portanto, em vez de myuser, use myuser@mydemoserver.

Observação

Se você já tiver usuários com os mesmos nomes no Servidor Único ou servidor local do qual está migrando e no servidor de destino, lembre-se de que esse processo de restauração pode alterar as senhas dessas funções. Consequentemente, todos os comandos subsequentes que você precisa executar podem exigir as senhas atualizadas. Isso não se aplica se o servidor de origem for um Servidor Flexível, pois o Servidor Flexível não permite o despejo de senhas para os usuários devido a medidas de segurança aprimoradas.

Criar um novo banco de dados

Antes de restaurar seu banco de dados, talvez seja necessário criar um banco de dados novo e vazio. Para fazer isso, o usuário que você está usando deve ter a permissão CREATEDB. Aqui estão dois métodos comumente usados:

  1. Usando createdb utilitário O programa createdb permite a criação de banco de dados diretamente da linha de comando bash, sem a necessidade de fazer logon no PostgreSQL ou sair do ambiente do sistema operacional. Por exemplo:

    createdb <new database name> -h <server name> -U <user name>
    

    Por exemplo, se você tiver um servidor chamado mydemoserver, um usuário chamado myuser e o novo banco de dados que você deseja criar for testdb_copy, execute o seguinte comando:

    createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
    

    Se você estiver usando um Servidor Único, seu nome de usuário incluirá o componente de nome de servidor. Portanto, em vez de myuser, use myuser@mydemoserver.

  2. Usando o comando SQL Para criar um banco de dados usando um comando SQL, você precisará se conectar ao servidor PostgreSQL por meio de uma interface de linha de comando ou uma ferramenta de gerenciamento de banco de dados. Depois de conectado, você pode usar o seguinte comando SQL para criar um novo banco de dados:

CREATE DATABASE <new database name>;

Substitua <new database name> pelo nome que você deseja fornecer ao seu novo banco de dados. Por exemplo, para criar um banco de dados chamado testdb_copy, o comando seria:

CREATE DATABASE testdb_copy;

Restaurando o despejo

Depois de criar o banco de dados de destino, você pode restaurar os dados nesse banco de dados do arquivo de despejo. Durante a restauração, registre todos os erros em um arquivo errors.log e verifique se há erros após a restauração.

psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log

Por exemplo, se você tiver um servidor chamado mydemoserver, um usuário chamado myuser e um novo banco de dados chamado testdb_copy, execute o seguinte comando:

psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log

Verificação pós-restauração

Após a conclusão do processo de restauração, é importante examinar o arquivo errors.log para quaisquer erros que possam ter ocorrido. Esta etapa é crucial para garantir a integridade e a completude dos dados restaurados. Resolva todos os problemas encontrados no arquivo de log para manter a confiabilidade do banco de dados.

Otimizar o processo de migração

Ao trabalhar com bancos de dados grandes, o processo de despejo e restauração pode ser longo e pode exigir otimização para garantir a eficiência e a confiabilidade. É importante estar ciente dos vários fatores que podem afetar o desempenho dessas operações e tomar medidas para otimizá-las.

Para obter diretrizes detalhadas sobre como otimizar o processo de despejo e restauração, consulte o artigo Melhores práticas para pg_dump e pg_restore. Esse recurso fornece informações e estratégias abrangentes que podem ser benéficas para lidar com bancos de dados grandes.

Próximas etapas