Esportazione e importazione mediante pg_dump, pg_dumpall e pg_restore

Questa pagina descrive l'esportazione e l'importazione dei 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 sottoprovvisionata.

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ù sulle pg_dump, pg_dumpall e pg_restore utilità.

Esportare i dati da Cloud SQL per PostgreSQL

Puoi utilizzare Cloud SQL per eseguire un'esportazione dalla Google Cloud console, da gcloud CLI 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 due utilità, assicurati di utilizzare anche le opzioni richieste per garantire 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, per importarlo in un secondo momento 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 di dump.

  • --format

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

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

  • --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 generata dal flag clean.

Inoltre, devi rimuovere tutti i seguenti elementi:

  • Istruzioni relative alle estensioni, se Cloud SQL non supporta l'estensione. Per l'elenco delle estensioni supportate, consulta Estensioni PostgreSQL.
  • Istruzioni CREATE EXTENSION o DROP EXTENSION che fanno riferimento a plpgsql. Questa estensione è preinstallata sulle istanze Cloud SQL Postgres.
  • Istruzioni COMMENT ON EXTENSION.

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

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 esportare in parallelo, utilizza il flag -j NUM_CORES. NUM_CORES è il numero di core dell'istanza di origine.

Esportare tutti i database

pg_dumpall è un'utilità che consente di estrarre tutti i database PostgreSQL di un cluster in un singolo 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 flag cloudsql.pg_authid_select_role su un nome di ruolo PostgreSQL. Se il ruolo esiste, ha accesso in 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.

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

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

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

La post-elaborazione da sed commenta tutte le istruzioni di estensione nel file di dump SQL.

Quando importi utilizzando pg_restore, specifica il sommario elaborato con l'argomento della riga di comando "--use-list=DATABASE_NAME.toc".

Importare i 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 importare 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

Passaggi successivi