Esportazione e importazione mediante pg_dump, pg_dumpall e pg_restore

Questa pagina descrive l'esportazione e l'importazione di dati nelle istanze Cloud SQL utilizzando pg_dump, pg_dumpall e pg_restore.

Prima di iniziare

Le esportazioni utilizzano le risorse del database, ma non interferiscono con le normali operazioni del database, a meno che l'istanza non sia sottodimensionata.

Per le best practice, consulta Best practice per l'importazione e l'esportazione dei dati.

Dopo aver completato un'operazione di importazione, verifica i risultati.

Scopri di più sugli strumenti pg_dump, pg_dumpall e pg_restore.

Esportare i dati da Cloud SQL per PostgreSQL

Puoi utilizzare Cloud SQL per eseguire un'esportazione dalla console Google Cloud, dall'interfaccia a riga di comando gcloud o dall'API.

  • Per esportare un singolo database PostgreSQL, utilizza l'utilità pg_dump.
  • Per esportare tutti i database PostgreSQL di un cluster, utilizza l'utilità pg_dumpall.

Quando utilizzi una delle utilità, assicurati di utilizzare anche le opzioni richieste per verificare che il file di esportazione risultante sia valido per l'importazione in Cloud SQL.

Esportare i dati da un server PostgreSQL on-premise utilizzando pg_dump

Per esportare un database non gestito da Cloud SQL, al fine di importarlo successivamente in Cloud SQL, utilizza l'utilità pg_dump con i seguenti flag:

  • --no-owner

    I comandi di modifica della proprietà non devono essere inclusi nel file dump.

  • --format

    I formati custom e directory sono consentiti se il file dump è destinato all'utilizzo con pg_restore.

    Per il formato plain-text, esporta in un SQL dump file. Questo formato non è compatibile con pg_restore e deve essere importato utilizzando il comando di importazione della console Google Cloud o il client psql.

  • --no-acl

    Questo flag è obbligatorio se il dump contiene istruzioni per concedere o revocare l'appartenenza a un ruolo SUPERUSER.

  • --clean

    Questo flag facoltativo ti consente di includere l'istruzione SQL DROP <object> necessaria per eliminare (pulire) gli oggetti del database prima di importarli.

  • --if-exists

    Questo flag facoltativo ti consente di includere l'istruzione SQL IF EXISTS con ogni istruzione DROP prodotta dal flag clean.

Inoltre, devi rimuovere tutto quanto segue:

  • Dichiarazioni relative alle estensioni, se Cloud SQL non supporta l'estensione. Consulta la sezione Estensioni PostgreSQL per l'elenco delle estensioni supportate.
  • Dichiarazioni CREATE EXTENSION o DROP EXTENSION che fanno riferimento a plpgsql. Questa estensione è preinstallata sulle istanze PostgreSQL di Cloud SQL.
  • COMMENT ON EXTENSION estratti conto.

Verifica che la codifica predefinita, in base alle impostazioni del database, sia corretta per i tuoi dati. Se necessario, puoi sostituire il valore predefinito con il flag --encoding.

Esportare i dati utilizzando il formato custom da Cloud SQL per PostgreSQL

Per utilizzare il formato personalizzato, esegui pg_dump da una riga di comando:

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

Esportare i dati da più file in parallelo da Cloud SQL per PostgreSQL

Puoi utilizzare il formato di output directory solo per esportare i dati da più file in parallelo.

Per eseguire l'esportazione in parallelo, utilizza il flag -j NUM_CORES. NUM_CORES è il numero di core dell'istanza di origine.

Esporta tutti i database

pg_dumpall è un'utilità che consente di estrarre tutti i database PostgreSQL di un cluster in un unico file di script. Questo file contiene comandi SQL che puoi utilizzare per ripristinare i database.

Per esportare tutti i database PostgreSQL in un'istanza Cloud SQL, utilizza l'utilità pg_dumpall con i seguenti flag obbligatori:

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

L'utilità pg_dumpall non ha accesso ai database cloudsqladmin o template.

Per esportare tutti i database PostgreSQL, esegui il seguente comando:

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

Per visualizzare le password dei ruoli durante il dump dei ruoli con pg_dumpall, imposta il cloudsql.pg_authid_select_role flag su un nome di ruolo PostgreSQL. Se il ruolo esistente ha accesso di sola lettura (SELECT) alla tabella pg_authid. Questa tabella contiene le password dei ruoli.

Importa

Utilizza l'utilità pg_restore per importare un archivio in un database Cloud SQL. pg_restore funziona solo con gli archivi creati da pg_dump nei formati custom o directory. Scopri di più su pg_restore.

Importazione da un file di dump creato con il formato custom in Cloud SQL per PostgreSQL

Se il file dump è stato creato con formato personalizzato, esegui il seguente comando:

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

Il post-processing da sed commenta tutti gli enunciati di estensione nel file di dump SQL.

Durante l'importazione utilizzando pg_restore, specifica l'indice elaborato con l'argomento della riga di comando "--use-list=DATABASE_NAME.toc".

Importare dati da più file in parallelo in Cloud SQL per PostgreSQL

Puoi importare i dati da più file in parallelo solo per gli archivi creati utilizzando i formati di output directory e custom.

Per eseguire l'importazione in parallelo, utilizza il flag -j NUM_CORES. NUM_CORES è il numero di core dell'istanza di destinazione.

Prestazioni di importazione su Cloud SQL per PostgreSQL

Le prestazioni di

Passaggi successivi