Migre seu banco de dados PostgreSQL usando dump e restore

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

Pode utilizar pg_dump para extrair uma base de dados PostgreSQL para um ficheiro de cópia de segurança. O método para restaurar o banco de dados depende do formato do dump escolhido. Se o seu dump é feito com o formato simples (que é o padrão -Fp, portanto, nenhuma opção específica precisa ser especificada), então a única opção para restaurá-lo é usando psql, pois ele gera um arquivo de texto simples. Para os outros três métodos de dump: custom, directory e tar, pg_restore devem ser usados.

Importante

As instruções e comandos fornecidos neste artigo são projetados para serem executados em terminais bash. Isso inclui ambientes como o Windows Subsystem for Linux (WSL), Azure Cloud Shell e outras interfaces compatíveis com bash. Certifique-se de que está a utilizar um terminal bash para seguir os passos e executar os comandos detalhados neste guia. Usar um tipo diferente de terminal ou ambiente de 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 grandes bancos de dados.

O portal do Azure simplifica esse processo por meio da folha Connect oferecendo comandos pré-configurados que são adaptados ao seu servidor, com valores substituídos pelos dados do usuário. É importante observar que a folha Connect 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 esse recurso:

  1. Acessar o portal do Azure: primeiro, vá para o portal do Azure e escolha a folha Conectar.

    Captura de ecrã a mostrar o posicionamento da folha Connect no portal do Azure.

  2. Selecione seu banco de dados: na folha Conectar, você encontrará uma lista suspensa de seus bancos de dados. Selecione o banco de dados a partir do qual deseja executar um dump.

    Captura de tela mostrando a lista suspensa onde o 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 & psql - usando arquivo de texto singular: Ideal para bancos de dados menores, esta opção utiliza um único arquivo de texto para o processo de despejo e restauração.
    • pg_dump & 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 e/ou pg_restore prontos para usar pg_dump psql. 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 único servidor ou não tiver acesso ao portal do servidor flexível, leia esta página de documentação. Ele contém informações semelhantes às apresentadas na folha Connect for Flexible Server no portal.

Nota

Como pg_dumpo , pg_restore psqle pg_dumpall os utilitários dependem da libpq, você pode usar qualquer uma das variáveis de ambiente suportadas que ele oferece, ou você pode usar o arquivo de senha para evitar ser solicitado a fornecer a senha toda vez que executar qualquer um desses comandos.

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

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

Importante

É essencial usar o pg_dump, psqlpg_restore e pg_dumpall utilitários que são da mesma versão principal ou uma versão principal superior ao servidor de banco de dados do qual você está exportando dados 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 superior à do servidor de origem, use utilitários que sejam a mesma versão principal ou superior ao servidor de destino.

Nota

É importante estar ciente de que pg_dump pode exportar apenas um banco de dados de cada 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 dump. No entanto, é crucial entender que pg_dump não despeja funções ou definições de usuários, pois estes são considerados objetos globais dentro do ambiente PostgreSQL. Para uma migração abrangente, incluindo usuários e funções, você precisa usar pg_dumpall -ro . Este comando permite capturar todas as informações de função e usuário do seu ambiente PostgreSQL. Se você estiver migrando dentro de bancos de dados no mesmo servidor, sinta-se à vontade para pular 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 nomeado mydemoserver e um usuário nomeado myuser , execute o seguinte comando:

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

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

Despejando funções de um servidor flexível

Em um ambiente de Servidor Flexível, as 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 como você executa um despejo de funções, pois o comando padrão pg_dumpall -r 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 --no-role-passwords opção em seu pg_dumpall comando. Esta opção impede pg_dumpall a tentativa de aceder pg_authid à tabela, que não consegue ler devido a restrições de segurança.

Para despejar funções com êxito 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, 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

Limpeza do despejo de papéis

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

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

  • Excluindo usuários específicos do serviço: exclua usuários de serviço de servidor único, como azure_superuser ou azure_pg_admin. Estes são específicos para o serviço e serão criados automaticamente no novo ambiente.

Use o seguinte sed comando 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

Este 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 NOSUPERUSER atributos e NOBYPASSRLS das ALTER ROLE instruções.

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

Para exportar seu banco de dados PostgreSQL existente no local 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 único servidor, seu nome de usuário incluirá o componente de nome do 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, certifique-se de ter despejado e limpo corretamente as funções. Se você estiver migrando dentro de bancos de dados no mesmo servidor, o despejo das funções e a restauração podem não ser necessários. No entanto, para migrações entre 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. Este comando usa o psql utilitário para executar os comandos SQL contidos no roles.sql arquivo, 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, 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 único servidor, seu nome de usuário incluirá o componente de nome do servidor. Portanto, em vez de myuser, use myuser@mydemoserver.

Nota

Se você já tiver usuários com os mesmos nomes no Servidor Único ou no 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, quaisquer comandos subsequentes que você precise 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 usuários devido a medidas de segurança aprimoradas.

Criar uma nova base de dados

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

  1. Usando createdb o utilitário O createdb programa permite a criação de banco de dados diretamente da linha de comando bash, sem a necessidade de fazer login 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 nomeado 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 único servidor, seu nome de usuário incluirá o componente de nome do 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 seu servidor PostgreSQL por meio de uma interface de linha de comando ou uma ferramenta de gerenciamento de banco de dados. Uma vez 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 deseja dar à sua nova base 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 a partir do arquivo de despejo. Durante a restauração, registre todos os erros em um errors.log arquivo e verifique seu conteúdo em busca de erros após a restauração ser feita.

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 rever o errors.log ficheiro para verificar se existem erros que possam ter ocorrido. Esta etapa é crucial para garantir a integridade e integridade dos dados restaurados. Resolva quaisquer problemas encontrados no arquivo de log para manter a confiabilidade do seu 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 demorado e exigir otimização para garantir eficiência e confiabilidade. É importante estar ciente dos vários fatores que podem impactar o desempenho dessas operações e tomar medidas para otimizá-las.

Para obter orientações detalhadas sobre como otimizar o processo de despejo e restauração, consulte o artigo Práticas recomendadas para pg_dump e pg_restore . Este recurso fornece informações abrangentes e estratégias que podem ser benéficas para o tratamento de grandes bases de dados.

Próximos passos