Nesta página, descrevemos como exportar dados de clusters do AlloyDB para PostgreSQL para um bucket do Cloud Storage no formato CSV, que pode ser usado por outras ferramentas e ambientes.
Para informações sobre como migrar um banco de dados inteiro de um servidor de banco de dados compatível para uma nova instância do AlloyDB, consulte Migrar um banco de dados para o AlloyDB usando o Database Migration Service. Se você estiver exportando porque quer criar uma nova instância a partir do arquivo exportado, considere restaurar um cluster de um backup armazenado.
É possível cancelar a exportação de dados dos clusters do AlloyDB para PostgreSQL. Para mais informações, consulte Cancelar a exportação de dados.
Antes de começar
- Antes de iniciar uma operação de exportação, lembre-se de que elas usam recursos do banco de dados, mas não interferem nas operações padrão, a menos que a instância tenha um provisionamento menor do que deveria ser.
SELECT_QUERY
pode conter comentários ou espaços em branco no início e no fim. Os comentários são ignorados e os espaços em branco são removidos antes da execução da consulta de exportação.- As cobranças por transferência de dados entre regiões se aplicam quando o bucket de destino está em uma região diferente do cluster de origem. Para mais informações, consulte Preços do AlloyDB para PostgreSQL.
- Várias operações de exportação podem ser executadas em paralelo.
- A compactação é ativada se o nome do objeto terminar com a extensão
.gz
. O objeto é exportado no formato.gz
para o Cloud Storage. - Apenas caracteres ASCII em código hexadecimal (com ou sem o prefixo
0x
) são permitidos para valores de caracteres em opções de CSV, comofield_delimiter
,quote_character
eescape_character
.
Permissões e papéis necessários para exportar do AlloyDB
Para exportar dados do AlloyDB para o Cloud Storage, o usuário que inicia a exportação precisa ter um dos seguintes papéis do Identity and Access Management (IAM):
- O papel de
Administrador do Cloud AlloyDB
(
roles/alloydb.admin
) - Um papel personalizado, incluindo as seguintes permissões:
alloydb.clusters.get
alloydb.clusters.export
Além disso, a conta de serviço do cluster do AlloyDB precisa ter um dos seguintes papéis:
- O papel
storage.objectAdmin
do IAM - Um papel personalizado, incluindo as seguintes permissões:
storage.objects.create
Para receber ajuda com os papéis do IAM, consulte Identity and Access Management.
Exportar dados para um arquivo CSV
Durante uma exportação de CSV, é possível especificar os esquemas que serão exportados. Todos os esquemas no nível do banco de dados estão qualificados para exportação.
É possível usar a CLI gcloud ou a API REST para personalizar o formato do arquivo CSV.
gcloud
- Crie um bucket do Cloud Storage.
Conceda à conta de serviço permissões no bucket do Cloud Storage para a operação de exportação. Use o formato da conta de serviço para identificar a conta de serviço do projeto de onde você está exportando. O formato da conta de serviço é:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Use
gcloud storage buckets add-iam-policy-binding
para conceder ostorage.objectAdmin
papel do IAM à conta de serviço. Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.Exporte o banco de dados para o bucket do Cloud Storage.
Execute o comando de exportação de CSV:
gcloud alloydb clusters export
.A tabela a seguir lista as opções para exportar dados em formato CSV:
--select-query
(obrigatório): a consulta de seleção usada para extrair os dados.
--async
(opcional): retorna imediatamente, sem aguardar a conclusão da operação em andamento.--field-delimiter
(opcional): especifica o caractere que separa as colunas em cada linha do arquivo. O padrão é uma vírgula. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal.--quote-character
(opcional): especifica o caractere de aspas a ser usado quando um valor de dados é colocado entre aspas. O padrão é uma aspa dupla. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal.--escape-character
(opcional): especifica o caractere que precisa aparecer antes de um caractere de dados que precisa de escape. O padrão é o mesmo que--quote-character
. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal.
Para usar esses recursos, inclua as opções no comando da CLI gcloud.
Caso contrário, remova esses parâmetros do comando:
gcloud alloydb clusters export CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" --select-query=SELECT_QUERY --field-delimiter=FIELD_DELIMITER --quote-character=QUOTE_CHARACTER --escape-character=ESCAPE_CHARACTER --csv
Se você não precisar manter o papel do IAM definido anteriormente, revogue agora.
REST v1
Crie um bucket para a exportação:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
Use o formato da conta de serviço para identificar a conta do projeto de origem.
O formato da conta de serviço é:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Ele precisa receber permissões para o bucket do Cloud Storage na operação de exportação.
Use gcloud storage buckets add-iam-policy-binding para conceder o papel do IAM
storage.objectAdmin
à conta de serviço. Para ajuda com a configuração de permissões do IAM, consulte Como usar as permissões do Cloud IAM.Exporte o banco de dados.
Use o método HTTP e o URL a seguir:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export
Antes de usar os dados da solicitação, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto;
- REGION: a região em que o cluster do AlloyDB é implantado.
- CLUSTER_ID: o ID do cluster.
- BUCKET_NAME: o nome do bucket do Cloud Storage.
- PATH_TO_CSV_FILE: o caminho para o arquivo CSV.
- DATABASE_NAME: o nome de um banco de dados dentro do cluster do AlloyDB.
SELECT_QUERY: a consulta SQL para a exportação.
ESCAPE_CHARACTER (opcional): o caractere que precisa aparecer antes de um caractere de dados que precisa de escape. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal. Por exemplo,
22
representa aspas duplas.QUOTE_CHARACTER (opcional): o caractere que inclui valores de colunas com um tipo de dados de string. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal. Por exemplo,
22
representa aspas duplas.FIELD_DELIMITER (opcional): o caractere que divide os valores da coluna. O valor desse argumento precisa ser um caractere no código ASCII hexadecimal. Por exemplo,
2C
representa uma vírgula.
Solicitar corpo JSON:
{ "gcs_destination": { "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE" }, "database": "DATABASE_NAME", "csv_export_options": { "select_query": "SELECT_QUERY", "escape_character": "ESCAPE_CHARACTER", "quote_character": "QUOTE_CHARACTER", "field_delimiter": "FIELD_DELIMITER" } }
Para enviar a solicitação, use uma destas opções:
curl (Linux, macOS ou Cloud Shell)
Salve o corpo da solicitação em um arquivo chamado request.json
e execute o comando a seguir:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
PowerShell (Windows)
Salve o corpo da solicitação em um arquivo chamado request.json
e execute o comando a seguir:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
Você vai receber uma resposta JSON semelhante a esta:
Resposta
{ "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata", "createTime": "2024-09-17T06:05:31.244428646Z", "target": "projects/PROJECT_ID/locations/REGION/clusters/TARGET_CLUSTER", "verb": "export", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Se você não precisar manter as permissões do IAM definidas anteriormente, remova-as agora.
Para ver a lista completa de parâmetros da solicitação, consulte
clusters:export
.
Personalizar o formato de um arquivo de exportação CSV
É possível usar a CLI gcloud ou a API REST para personalizar o formato do arquivo CSV. Ao fazer uma exportação, é possível especificar as seguintes opções de formatação:
Opção CSV |
Valor padrão |
Flag da gcloud |
Propriedade da API REST |
Descrição |
---|---|---|---|---|
Escape |
O padrão é o mesmo que o valor QUOTE . |
--escape-character
|
escape_character |
Caractere que aparece antes de um caractere de dados que precisa ser escapado. |
Cotação |
"22" Código hexadecimal ASCII para aspas duplas. |
--quote-character
|
quote_character |
Especifica o caractere de aspas a ser usado quando um valor de dados é colocado entre aspas. |
Delimitador de campo | "2C" Código hexadecimal ASCII para vírgula. |
--field-delimiter |
field_delimiter |
Caractere que divide os valores da coluna. |
Por exemplo, um comando da CLI gcloud que usa todos esses argumentos pode ser parecido com o seguinte:
gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C'
--csv
O corpo da solicitação da API REST equivalente é semelhante a este:
{
"exportContext":
{
"gcs_destination": {
"uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
},
"database": "DATABASE_NAME",
"csv_export_options":
{
"select_query": "SELECT_QUERY",
"escape_character": "5C",
"quote_character": "22",
"field_delimiter": "2C",
}
}
}
Por padrão, a exportação de CSV cria uma saída CSV padrão. Se você precisar de mais opções do que as fornecidas pelo AlloyDB, use a seguinte instrução em um cliente psql
:
\copy `TABLE_NAME` TO `CSV_FILE_NAME.csv' WITH
(FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');