Spostamento dei dati postgresql su un'unità diversa


20

Sto usando AWS come ambiente cloud. Ho installato PostgreSQL sulla stessa unità del mio volume di istanza di root. Ho collegato e montato la seconda unità sulla mia istanza. Ora voglio spostare tutti i miei dati PostgreSQL su un'altra unità. Sono ancora in modalità di sviluppo, quindi posso eliminare i vecchi dati se questo rende più semplice il trasferimento in questo momento. Qual è il modo migliore per farlo?

Il tablespace PostgreSQL è qualcosa che dovrei guardare?


1
I tablespace sarebbero la strada da percorrere se si volesse spostare parte del proprio database (s) su un'unità separata.
Erwin Brandstetter,

Questa risposta suggerisce che NONtablespaces dovrebbe andare su un disco rigido esterno: dba.stackexchange.com/a/62037/41823 Non sei sicuro di comprendere il rischio se stai già inserendo i dati su un dispositivo esterno?
Statwonk,

Risposte:


19

Quanto segue dovrebbe farlo:

  1. Chiudi PostgreSQL
  2. Assicurati che PostgreSQL non funzioni più
  3. Controlla che PostgreSQL sia veramente fermo
  4. Copia la vecchia directory dei dati nella nuova unità
    Questo è generalmente definito attraverso un parametro della riga di comando ( -D) per il tuo servizio o attraverso la PGDATAvariabile di ambiente.
  5. Aggiorna la tua configurazione PostgreSQL (servizio, ambiente var) per puntare alla nuova directory di dati.
  6. Se hai copiato i dati, rinomina la vecchia directory dei dati per assicurarti che PostgreSQL non riesca più a trovarli. In questo modo riceverai un messaggio di errore se la configurazione non è stata corretta.
  7. Avvia il servizio
  8. Se tutto funziona correttamente, puoi eliminare la vecchia directory.

Nel quarto punto, cosa intendi con 'Questo è generalmente definito attraverso un parametro da riga di comando ...'?
codecool

@codecool: ci sono diversi modi in cui questo può essere definito. Di solito fa parte della definizione del servizio. Ma dipende dal sistema operativo, dalla distribuzione e dalle modifiche personali.
a_horse_with_no_name

Questo ha funzionato ma ho usato regedit invece della riga di comando per Windows. Accidenti. Il mio disco stava per esaurire lo spazio, ma ora lo faccio funzionare in modo sicuro altrove con spazio sufficiente.
trincea

Ecco un bel post sul blog passo-passo con dettagli specifici, aggiornato per Ubuntu tipico e versione 9.5 9.5: digitalocean.com/community/tutorials/…
JaakL

4
  1. Interrompere il servizio postgresql
  2. cp -a directory_data_directory_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. export PGDATA = destinazione_data_directory
  5. Modifica della directory dei dati in destinazione_data_directory in postgresql.conf
  6. pg_ctl start

Mi fa piacere che ti sia ricordato il chowncomando per la nuova cartella.
RolandoMySQLDBA

0

Ecco una descrizione di come spostare un database PostgreSQL esistente in una nuova posizione (cartella, partizione), su Arch Linux (questa procedura dovrebbe essere simile per altre distribuzioni Linux).

pg_dumpallè un'utilità per scrivere (scaricare) tutti i database PostgreSQL di un cluster in un file di script. ... Lo fa chiamando pg_dumpper ogni database nel cluster. ...

Per esempio:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Devi:

  • pg_dumpalldatabase export ( )
  • crea una nuova directory EMPTY
  • modifica il file postgresql.conf
  • riavvia il servizio server postgres
  • carica i vecchi dati dal file di dump nel nuovo database

Riepilogo dei comandi

Lascio le richieste della shell (nome host ...) per chiarire in quale shell mi trovo mentre procedo.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Esempio

Vedi il mio post sul blog di accompagnamento, Come spostare un database PostgreSQL esistente su Arch Linux , per codice e output commentati .---


Riferimenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.