Come posso spostare un tablespace PostgreSQL?


12

C'è un modo per spostare fisicamente un tablespace PostgreSQL 9.3 da /old/dira /new/dir? Vorrei solo mvla directory e dire a PostgreSQL che il tablespace si trova ora in /new/dir. Sembra che ALTER TABLESPACEti consente solo di rinominare.

Vorrei evitare di creare un nuovo tablespace e spostare il database su di esso. Presumo che sarebbe un processo di copia lento che richiede molto tempo e spazio su disco. Voglio anche evitare il collegamento simbolico /old/dira /new/dir.


spostare / old / dir su veryold / dir, montare new / dir su old / dir, copiare i dati da ver_old dir a old / dir?
simplexio,

Risposte:


12

Presumo che il nome del tuo tablespace sia tblspc.

  1. Ottieni Oid del tuo tablespace
test = # SELECT oid, spcname FROM pg_tablespace DOVE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 riga)
  1. Smetti di postgres
$ pg_ctl -D $ PGDATA stop
  1. Sposta la directory dalla vecchia alla nuova
$ mv / old / dir / new / dir

o

$ cp -r / old / dir / new / dir
$ rm -rf / old / dir
  1. Cambia il link del tablespace nella nuova directory
$ cd $ PGDATA / pg_tblspc
$ rm 24580
$ ln -s / new / dir 24580
  1. Inizia postgres
$ pg_ctl -D $ PGDATA inizio

Quindi, puoi vedere che la directory del tablespace è cambiata.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / New / dir
(1 riga)
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.