PostgreSQL – Utilizzo di COPY, pg dump e restore

Alex Isaac
Alex Isaac

Follow

29 gennaio, 2020 – 3 min read

Fonte immagine : digitalocean.com

Il comando COPY in postgreSQL è utilizzato per importare i dati nei file nella tabella del database e anche per esportare le tabelle dal database al file.

Per esempio se vogliamo importare i dati da un file CSV nella tabella del database, si utilizza il seguente comando.

COPY <table_name> FROM <file_path> DELIMITER ‘,’ CSV;

Il comando di cui sopra presuppone che il file CSV abbia i valori per tutti i campi della tabella con delimitatore come virgola(,) e che i campi siano ordinati nel file come quelli della tabella.

Se il file contiene i valori solo per i campi particolari della tabella, dobbiamo dare esplicitamente i nomi dei campi insieme al nome della tabella.

Per esempio, se il file ha valori solo per field1, field2 e field3, ma la tabella ha molti campi,

COPY <table_name>(field1, field2, field3) FROM <file_path> DELIMITER ‘ , ‘ CSV;

Se il comando COPY ha avuto successo, restituirà COPY <numero di righe copiate>

Possiamo usare l’HEADER nella linea di comando che può essere usato per ignorare la prima linea del file durante la copia perché può contenere il nome dei campi.

COPY <table_name> FROM <file_path> DELIMITER ‘,’ CSV HEADER;

Se l’errore si verifica tra l’operazione COPY FROM, l’operazione sarà interrotta, ma i dati memorizzati finora non saranno cancellati. Questi dati non sono visibili ma occupano lo spazio nel disco. In questo caso, dobbiamo usare il comando VACUUM per pulire gli usi indesiderati del disco.

Esportazione in un file dalla tabella del database

Il comando COPY TO è usato per copiare le tabelle del database nel file usando il delimitatore richiesto.

COPY <table_name> TO <file_path> DELIMITER ‘,’ CSV HEADER;

Se non vuoi che i nomi_colonna siano copiati nel file CSV, allora puoi ignorare l’HEADER.

Per esportare solo i campi particolari, puoi dare solo i nomi dei campi con il nome della tabella.

COPY <table_name>(field1, field2, field3) TO <file_path> DELIMITER ‘,’ CSV;

Possiamo anche usare le query per copiare i record particolari che corrispondono alla condizione nel file.

COPY ( SELECT * FROM <table>WHERE id=10 ) TO <file_path> DELIMITER ‘,’ CSV;

Si raccomanda di dare il pathname assoluto quando si usa COPY. Il server stesso ti obbliga a usare il pathname assoluto quando usi COPY TO. Ma durante la lettura del file con COPY FROM puoi usare sia il pathname assoluto che quello relativo.

Differenza tra il comando COPY e \copy

Se sei connesso ad un server PostgreSQL remoto e vuoi copiare i record di una tabella nel file nella macchina locale. In questo caso, puoi usare il comando \copy che è un comando integrato di PostgreSQL. Mentre si usa COPY, il server sta facendo l’operazione di scrittura ma durante \copy, psql scrive il file CSV e lo trasferisce nella macchina locale.

Per usare il comando \copy la tua macchina locale deve avere privilegi sufficienti. Non significa i privilegi di superutente.

pg_dump e pg_restore

Il pg_dump è uno strumento per il backup di un database in un file. Possiamo ripristinarlo in seguito in un altro database. Per fare il backup del database in un file esegui,

pg_dump -U <username> -h <host> -W -F t < nome_db>>< nome_fileoutput>

dove,

-W forza la richiesta di una password durante l’accesso al database.

-F specifica il formato del file di dump creato, qui t si riferisce al file tar.

Ora il file di dump viene creato per il database.

Inoltre, possiamo ripristinare il file nel nuovo database usando,

pg_restore -U <username> -h <host> -W -F t -d < nome_db>< nome_file_dump>

Tutti i parametri sono uguali a quelli di sopra.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *