Il comando di copia è pg_dump che dovrebbe trovarsi in /usr/bin
Il pg_dump
L’esecuzione del comando pg_dump non fa altro che aprire un nuovo backend verso il database server e interrogare il catalogo di sistema per andare a costruire le DDL e l’export dei dati che poi andranno a finire nel file di output.
L’operazione avviene come di consueto attraverso una transazione che rispetterà le regole di isolamento delle transazioni presenti in PostgreSQL.
pg_dump una volta invocato, fatti i debiti controlli sui parametri e una volta connesso al database server esegue il seguente comando:
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
In questo modo apre esplicitamente una transazione e impone il massimo livello di isolamento delle transazioni per il suo backend vincolando il cluster a garantirgli la consistenza in lettura senza nessun compromesso.
Successivamente, come si legge dal sorgente pg_dump.c, esegue una serie di query sul catalogo di sistema per generare le tabelle interessate dal dump e infine, se previsto dai parametri, i dati.
È interessante osservare come l’elaborazione e la costruzione del file di dump sia alquanto “furba“.
Infatti la parte più onerosa durante la fase di restore, la creazione delle primary keys e gli indici, viene tenuta per ultima.
Inoltre di default per il caricamento dei dati viene adoperato il comando copy che, a differenza delle insert, attraversa gli stage dell’esecuzione di una query soltanto una volta velocizzando notevolmente il processo di caricamento.
pg_dump -v -f /var/newstar/copie -U newstar -Fc newstar
-v verbose
-f file di backup in output
-U user
-Fc formato compresso e utilizzabile per restore (consigliato)
Nessun commento:
Posta un commento