Cette page explique comment exporter des données de clusters AlloyDB pour PostgreSQL vers un bucket Cloud Storage au format CSV, qui peut être utilisé par d'autres outils et environnements.
Pour savoir comment migrer une base de données entière d'un serveur de base de données compatible vers une nouvelle instance AlloyDB, consultez Migrer une base de données vers AlloyDB à l'aide de Database Migration Service. Si vous souhaitez créer une nouvelle instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.
Vous pouvez annuler l'exportation de données à partir de clusters AlloyDB pour PostgreSQL. Pour en savoir plus, consultez Annuler l'exportation de données.
Avant de commencer
- Avant de commencer une opération d'exportation, n'oubliez pas que les opérations d'exportation utilisent des ressources de base de données, mais qu'elles n'interfèrent pas avec les opérations de base de données standards, sauf si l'instance est sous-provisionnée.
SELECT_QUERYpeut contenir des commentaires ou des espaces blancs au début et à la fin. Les commentaires sont ignorés et les espaces blancs sont supprimés avant l'exécution de la requête d'exportation.- Des frais de transfert de données interrégionaux s'appliquent lorsque le bucket cible se trouve dans une région différente de celle du cluster source. Pour en savoir plus, consultez Tarifs d'AlloyDB pour PostgreSQL.
- Plusieurs opérations d'exportation peuvent s'exécuter en parallèle.
- La compression est activée si le nom de l'objet se termine par l'extension
.gz. L'objet est ensuite exporté au format.gzvers Cloud Storage. - Seuls les caractères ASCII au format hexadécimal (avec ou sans le préfixe
0x) sont autorisés pour les valeurs de caractères dans les options CSV telles quefield_delimiter,quote_characteretescape_character.
Rôles et autorisations requis pour l'exportation à partir d'AlloyDB
Pour exporter des données d'AlloyDB vers Cloud Storage, l'utilisateur qui lance l'exportation doit disposer de l'un des rôles Identity and Access Management (IAM) suivants :
- Le rôle
Administrateur Cloud AlloyDB
(
roles/alloydb.admin) - Un
rôle personnalisé,
comprenant les autorisations suivantes :
alloydb.clusters.getalloydb.clusters.export
De plus, le compte de service du cluster AlloyDB doit disposer de l'un des rôles suivants :
- Le rôle IAM
storage.objectAdmin - Un rôle personnalisé comprenant les autorisations suivantes :
storage.objects.create
Pour obtenir de l'aide sur les rôles IAM, consultez Identity and Access Management.
Exporter des données vers un fichier CSV
Lors d'une exportation au format CSV, vous pouvez spécifier les schémas à exporter. Tout schéma situé au niveau de la base de données peut être exporté.
Vous pouvez utiliser la gcloud CLI ou l'API REST pour personnaliser le format de votre fichier CSV.
gcloud
- Créez un bucket Cloud Storage.
Accordez au compte de service les autorisations d'accès au bucket Cloud Storage pour l'opération d'exportation. Utilisez le format du compte de service pour identifier le compte de service du projet à partir duquel vous effectuez l'exportation. Le format du compte de service est le suivant :
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.comUtilisez
gcloud storage buckets add-iam-policy-bindingpour accorder le rôle IAMstorage.objectAdminau compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.Exportez la base de données vers votre bucket Cloud Storage.
Exécutez la commande d'exportation au format CSV :
gcloud alloydb clusters export.Le tableau suivant répertorie les options d'exportation de données au format CSV :
--select-query(obligatoire) : requête de sélection utilisée pour extraire les données.
--async(facultatif) : renvoie immédiatement, sans attendre la fin de l'opération en cours.--field-delimiter(facultatif) : spécifie le caractère qui sépare les colonnes de chaque ligne du fichier. La valeur par défaut est la virgule. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.--quote-character(facultatif) : spécifie le caractère de citation à utiliser lorsqu'une valeur de données est citée. La valeur par défaut est le guillemet double. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.--escape-character(facultatif) : spécifie le caractère qui doit apparaître avant un caractère de données devant être échappé. La valeur par défaut est la même que celle de--quote-character. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.
Pour utiliser ces fonctionnalités, incluez ces options dans la commande gcloud CLI.
Sinon, supprimez ces paramètres de la commande suivante :
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 --csvSi vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez le dès maintenant.
REST v1
Créez un bucket pour l'exportation de la manière suivante :
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>Utilisez le format du compte de service pour identifier le compte de service du projet à partir duquel vous effectuez l'exportation.
Le format du compte de service est le suivant :
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.comVous devez accorder à ce compte les autorisations d'accès au bucket Cloud Storage pour l'opération d'exportation.
Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le
storage.objectAdminrôle IAM au compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.Exportez votre base de données.
Utilisez la méthode HTTP et l'URL suivantes :
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:exportAvant d'utiliser les données de la requête, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet.
- REGION : région dans laquelle le cluster AlloyDB est déployé.
- CLUSTER_ID : ID du cluster.
- BUCKET_NAME : nom du bucket Cloud Storage.
- PATH_TO_CSV_FILE : chemin d'accès au fichier CSV.
- DATABASE_NAME : nom d'une base de données dans le cluster AlloyDB.
SELECT_QUERY : requête SQL pour l'exportation.
ESCAPE_CHARACTER (facultatif) : caractère qui doit apparaître avant un caractère de données devant être échappé. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple,
22représente un guillemet double.QUOTE_CHARACTER (facultatif) : caractère qui entoure les valeurs des colonnes dont le type de données est une chaîne. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple,
22représente un guillemet double.FIELD_DELIMITER (facultatif) : caractère qui sépare les valeurs de colonne. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple,
2Creprésente une virgule.
Corps JSON de la requête :
{ "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" } }Pour envoyer votre requête, utilisez l'une des options suivantes :
curl (Linux, macOS ou Cloud Shell)
Enregistrez le corps de la requête dans un fichier nommé request.json
et exécutez la commande suivante :
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)
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$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
Vous recevez une réponse JSON de ce type :
Réponse
{
"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
}
Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les dès maintenant.
Pour obtenir la liste complète des paramètres de la requête, consultez
clusters:export.
Personnaliser le format d'un fichier d'exportation CSV
Vous pouvez utiliser la gcloud CLI ou l'API REST pour personnaliser le format de votre fichier CSV. Lorsque vous effectuez une exportation, vous pouvez spécifier les options de mise en forme suivantes :
Option CSV |
Valeur par défaut |
Indicateur gcloud |
Propriété de l'API REST |
Description |
|---|---|---|---|---|
Échappement |
La valeur par défaut est la même que celle de QUOTE. |
--escape-character
|
escape_character |
Caractère qui précède un caractère de données devant être échappé. |
Citation |
"22"Code hexadécimal ASCII pour un guillemet double. |
--quote-character
|
quote_character |
Spécifie le caractère de citation à utiliser lorsqu'une valeur de données est citée. |
| Délimiteur de champ | "2C"Code hexadécimal ASCII pour la virgule. |
--field-delimiter |
field_delimiter |
Caractère séparant les valeurs de colonne. |
Par exemple, une commande gcloud CLI utilisant tous ces arguments peut se présenter comme suit :
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'
--csvLe corps de requête API REST équivalent ressemble à ceci :
{
"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",
}
}
}
Par défaut, l'exportation au format CSV crée un fichier de sortie au format CSV standard. Si vous avez besoin de plus
d'options que celles fournies par AlloyDB, vous pouvez utiliser l'
instruction suivante dans un psql client :
\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');
Étape suivante
- Découvrez comment exporter un fichier de dump SQL.
- Annulez une opération d'exportation.