Best practice per l'importazione e l'esportazione dei dati

Per ottimizzare le prestazioni, ridurre i costi di archiviazione ed evitare interruzioni operative quando sposti i dati in o da AlloyDB per PostgreSQL, segui queste best practice:

  • Non utilizzare i bucket Pagamenti del richiedente di Cloud Storage per le importazioni o le esportazioni.
  • Utilizza i flag corretti quando crei un file di dump SQL.
  • Comprimi i dati per ridurre i costi.
  • Riduci i processi di importazione ed esportazione a lunga esecuzione elaborando i dati in batch.
  • Verifica il database importato dopo l'importazione.

Non utilizzare i bucket di Cloud Storage con Pagamenti del richiedente

Non puoi utilizzare un bucket Cloud Storage con l'opzione Pagamenti del richiedente abilitata per le importazioni o le esportazioni da AlloyDB. AlloyDB utilizza un account di servizio gestito da Google, l'agente di servizio, per eseguire importazioni ed esportazioni. In genere, questo agente non dispone del contesto o della configurazione per addebitare al progetto del richiedente l'accesso ai dati, il che causa l'errore delle operazioni che coinvolgono i bucket con Pagamenti del richiedente.

Utilizza i flag corretti quando crei un file di dump SQL

Se non utilizzi i flag e le opzioni corretti quando esporti i dati in un file di dump SQL, l'importazione potrebbe non riuscire. Per informazioni sull'esportazione dei dati per l'importazione in AlloyDB, consulta Esporta un file DMP ed Esporta un file SQL.

Comprimi i dati per ridurre i costi

AlloyDB supporta l'importazione e l'esportazione di file .gz compressi da Cloud Storage. La compressione può far risparmiare molto spazio di archiviazione su Cloud Storage e ridurre i costi di archiviazione, soprattutto quando esporti grandi quantità di dati. Quando esporti un file di dump SQL o CSV utilizzando l'API AlloyDB, utilizza un'estensione del file .gz nell'URI di destinazione per comprimere i dati. Quando importi un file con estensione .gz, il file viene decompresso automaticamente.

Riduci i processi di importazione ed esportazione a lunga esecuzione

A seconda delle dimensioni dei dati, le importazioni e le esportazioni da AlloyDB possono richiedere molto tempo. Se un'operazione richiede troppo tempo, potrebbe bloccare altre operazioni.

Riduci il tempo necessario per completare ogni operazione utilizzando batch di dati più piccoli. Puoi anche utilizzare lo strumento pg_dump per eseguire un'esportazione manuale da un client connesso a un'istanza del pool di lettura.

Verifica il database importato

Al termine di un'operazione di importazione, connettiti al database utilizzando psql o un altro client ed esegui i comandi appropriati per assicurarti che i contenuti siano corretti, ad esempio elencando le tabelle o eseguendo query sul numero di righe.

Automatizza le operazioni di esportazione

Sebbene AlloyDB non fornisca un metodo integrato per automatizzare le esportazioni, puoi creare uno strumento di automazione utilizzando altri componentiGoogle Cloud come Cloud Scheduler, Pub/Sub e Cloud Run Functions.

Risoluzione dei problemi

Questa sezione fornisce suggerimenti per la risoluzione dei problemi che potresti riscontrare con le operazioni di importazione ed esportazione.

Operazioni di importazione

Problema Descrizione Correzione consigliata
ERROR: permission denied for schema public Per PostgreSQL 15 e versioni successive, l'importazione dei dati potrebbe non riuscire a causa delle autorizzazioni dello schema se crei il database di destinazione da template0.

Per risolvere il problema, utilizza il seguente comando per concedere i privilegi sullo schema public all'utente che importa i dati:

        GRANT ALL ON SCHEMA public TO IMPORT_USER;
        
L'operazione di importazione richiede troppo tempo. Un numero eccessivo di connessioni attive può interferire con le operazioni di importazione.

Prova a procedere come segue:

  • Chiudi le connessioni non utilizzate.
  • Per assicurarti che siano disponibili risorse sufficienti, controlla l'utilizzo di CPU e memoria utilizzata della tua istanza.
  • Per garantire le risorse massime per l'importazione, riavvia l'istanza prima di avviare l'operazione. In questo modo vengono chiuse tutte le connessioni e terminate le attività che potrebbero consumare risorse.
Un'operazione di importazione non va a buon fine perché uno o più utenti a cui viene fatto riferimento nel file di dump non esistono. Prima di importare un file di dump, tutti gli utenti del database che sono proprietari di oggetti o hanno ricevuto autorizzazioni per gli oggetti nel database di cui è stato eseguito il dump devono esistere nel database di destinazione. Se non esistono, l'operazione di importazione non riesce a ricreare gli oggetti con la proprietà o le autorizzazioni originali. Crea gli utenti del database richiesti prima dell'importazione.
GRANT stderr: ERROR: must be member of role ROLE_NAME Questo errore può verificarsi se importi un file di dump SQL che contiene oggetti di proprietà di ROLE_NAME o autorizzazioni concesse a ROLE_NAME, ma l'utente del database che esegue l'importazione non è un membro di ROLE_NAME. Per risolvere il problema, assicurati che il ruolo ROLE_NAME esista nel database di destinazione e concedi l'appartenenza a ROLE_NAME all'utente che esegue l'importazione prima di eseguire l'importazione.

Operazioni di esportazione

Problema Descrizione Correzione consigliata
HTTP Error 403: The service account does not have the required permissions for the bucket. Il account di servizio AlloyDB non dispone delle autorizzazioni necessarie per il bucket di destinazione. Assicurati che il bucket Cloud Storage di destinazione esista e che al account di servizio AlloyDB siano stati concessi i ruoli roles/storage.objectAdmin o roles/storage.objectCreator. Questi ruoli consentono di scrivere nel bucket. Consulta i ruoli di Identity and Access Management (IAM) per Cloud Storage.
L'esportazione in CSV è riuscita, ma l'esportazione in SQL non è andata a buon fine. I formati CSV e SQL vengono esportati in modo diverso. Il formato SQL esporta lo schema e i dati del database e in genere richiede più tempo. Il formato CSV esporta solo i dati risultanti da una query SELECT che fornisci. Se un'esportazione SQL non va a buon fine o è troppo lenta, valuta la possibilità di esportare singole tabelle utilizzando il formato CSV.
L'esportazione sta richiedendo troppo tempo. Se un'esportazione richiede troppo tempo nell'istanza principale, potrebbe essere troppo grande. Valuta la possibilità di esportare i dati in batch più piccoli. Ad esempio, esporta le tabelle singolarmente anziché esportare un intero database in un'unica operazione. Puoi anche utilizzare lo strumento pg_dump per eseguire un'esportazione manuale da un client connesso a un'istanza del pool di lettura.
Errore Create Extension nel log di pg_restore o importazione non riuscita. Il file di dump contiene riferimenti a un'estensione PostgreSQL non supportata da AlloyDB o non installata nel tuo cluster. Per rimuovere i riferimenti, modifica il file di dump o installa l'estensione nel cluster se AlloyDB la supporta.
Errore durante l'utilizzo di pg_dumpall. L'utilità pg_dumpall con flag come --globals-only potrebbe richiedere privilegi non disponibili in AlloyDB.

Per esportare oggetti globali come utenti e ruoli senza password, utilizza il seguente comando per includere il flag --no-role-passwords:

        pg_dumpall --globals-only --no-role-passwords
        
L'operazione di esportazione va in timeout o viene visualizzato Connection reset by peer. Se Cloud Storage non riceve dati entro un determinato periodo di tempo, la connessione può essere reimpostata. Questo potrebbe accadere se le query iniziali del database richieste per l'esportazione richiedono troppo tempo per l'esecuzione. In questo caso, prova a eseguire un'esportazione manuale utilizzando lo strumento pg_dump da un client connesso a un'istanza del pool di lettura.

Problemi comuni

Problema Descrizione Correzione consigliata
HTTP Error 409: Operation failed because another operation was already in progress. Il sistema consente una sola operazione di importazione o esportazione basata su API alla volta. Prova a eseguire la richiesta dopo il completamento dell'operazione attuale.

Passaggi successivi