Exportar e importar usando pg_dump, pg_dumpall e pg_restore

Nesta página, você verá como exportar e importar dados para as instâncias do Cloud SQL usando pg_dump, pg_dumpall e pg_restore.

Antes de começar

As exportações usam recursos do banco de dados, mas não interferem nas operações normais do banco de dados, a menos que a instância tenha um provisionamento menor do que deveria ser.

Para ver as práticas recomendadas, consulte Práticas recomendadas para importação e exportação de dados.

Depois de concluir uma operação de importação, verifique os resultados.

Saiba mais sobre os utilitários pg_dump, pg_dumpall e pg_restore.

Exportar dados do Cloud SQL para PostgreSQL

É possível usar o Cloud SQL para realizar uma exportação no Console do Google Cloud, na CLI gcloud ou na API.

  • Para exportar um único banco de dados PostgreSQL, use o utilitário pg_dump.
  • Para exportar todos os bancos de dados PostgreSQL de um cluster, use o utilitário pg_dumpall.

Ao usar qualquer um dos utilitários, use também as opções necessárias para garantir que o arquivo de exportação resultante seja válido para importação de volta ao Cloud SQL.

Exportar dados de um servidor PostgreSQL local usando pg_dump

Para exportar um banco de dados que não é gerenciado pelo Cloud SQL, para importação posterior no Cloud SQL, use o utilitário pg_dump com as sinalizações a seguir:

  • --no-owner

    Os comandos de mudança de propriedade não podem ser incluídos no arquivo dump.

  • --format

    Os formatos custom e directory serão permitidos se o arquivo dump for usado com pg_restore.

    Para o formato plain-text, exporte para um SQL dump file. Esse formato não é compatível com pg_restore e precisa ser importado usando o comando de importação do console do Google Cloud ou o cliente psql.

  • --no-acl

    Esse sinalizador é necessário caso seu despejo tenha instruções para conceder ou revogar assinaturas em um papel SUPERUSER.

  • --clean

    Essa flag opcional permite incluir a instrução SQL DROP <object> necessária para descartar (limpar) objetos de banco de dados antes da importação.

  • --if-exists

    Essa flag opcional permite incluir a instrução SQL IF EXISTS em cada instrução DROP produzida pela flag clean.

Além disso, remova todos os itens a seguir:

  • Instruções relacionadas à extensão, se o Cloud SQL não for compatível com ela. Consulte Extensões do PostgreSQL para acessar a lista de extensões compatíveis.
  • instruções CREATE EXTENSION ou DROP EXTENSION que referem a plpgsql. Essa extensão vem pré-instalada nas instâncias do Cloud SQL Postgres.
  • COMMENT ON EXTENSION.

Confirme se a codificação padrão dos dados, conforme determinado pelas configurações do banco de dados, está correta. Se necessário, é possível substituir o padrão com a sinalização --encoding.

Exportar dados usando o formato custom do Cloud SQL para PostgreSQL

Para usar o formato personalizado, em uma linha de comando, execute pg_dump:

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

Exportar dados de vários arquivos em paralelo com o Cloud SQL para PostgreSQL

Só é possível usar o formato de saída directory para exportar dados de vários arquivos em paralelo.

Para exportar em paralelo, use a sinalização -j NUM_CORES. NUM_CORES é o número de núcleos na instância de origem.

Exportar todos os bancos de dados

O pg_dumpall é um utilitário que permite extrair todos os bancos de dados PostgreSQL de um cluster em um único arquivo de script. Esse arquivo tem comandos SQL que podem ser usados para restaurar os bancos de dados.

Para exportar todos os bancos de dados PostgreSQL em uma instância do Cloud SQL, use o utilitário pg_dumpall com as seguintes sinalizações obrigatórias:

  • exclude-database=cloudsqladmin
  • exclude-database=template*

O utilitário pg_dumpall não tem acesso aos bancos de dados cloudsqladmin ou template.

Para exportar todos os bancos de dados do PostgreSQL, execute o seguinte comando:

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME –exclude-database=cloudsqladmin \
–exclude-database=template* > pg_dumpall.sql

Para visualizar senhas de papel ao despejar papéis com pg_dumpall, defina a sinalização cloudsql.pg_authid_select_role como um nome de papel do PostgreSQL. Se o papel existir, ele terá acesso somente leitura (SELECT) à tabela pg_authid. Essa tabela contém senhas de papéis.

Importar

Use o utilitário pg_restore para importar um arquivo para um banco de dados do Cloud SQL. pg_restore funciona apenas com arquivos criados por pg_dump nos formatos custom ou directory. Saiba mais sobre pg_restore.

Importar de um arquivo dump criado com o formato custom para o Cloud SQL para PostgreSQL

Se o arquivo dump tiver sido criado no formato personalizado, execute o seguinte comando:

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

O pós-processamento de comentários sed remove todas as instruções de extensão no arquivo dump SQL.

Ao fazer a importação usando pg_restore, especifique o sumário processado com o argumento de linha de comando "--use-list=DATABASE_NAME.toc".

Importe dados de vários arquivos em paralelo ao Cloud SQL para PostgreSQL

Só é possível importar dados de vários arquivos em paralelo apenas para arquivos criados usando os formatos de saída directory e custom.

Para importar em paralelo, use a sinalização -j NUM_CORES. NUM_CORES é o número de núcleos na instância de destino.

Importar o desempenho no Cloud SQL para PostgreSQL

A seguir