web-dev-qa-db-fra.com

Comment déplacer un espace de table PostgreSQL?

Existe-t-il un moyen de déplacer physiquement un espace de table PostgreSQL 9.3 de /old/dir à /new/dir? Je voudrais simplement mv le répertoire et dire à PostgreSQL que l'espace disque logique est maintenant situé à /new/dir. Ressemble à ALTER TABLESPACE vous permet uniquement de renommer.

Je voudrais éviter de créer un nouvel espace disque logique et d'y déplacer la base de données. Je suppose que ce serait un processus de copie lent qui nécessite beaucoup de temps et d'espace disque. Je veux également éviter les liens symboliques /old/dir à /new/dir.

12
kontextify

Je suppose que votre nom d'espace de table est tblspc.

  1. Obtenez Oid de votre espace de table
 test = # SELECT oid, spcname FROM pg_tablespace WHERE spcname = 'tblspc'; 
 oid | nom_spc 
 ------- + --------- 
 24580 | tblspc 
 (1 ligne) 
  1. Arrêtez les postgres
 $ pg_ctl -D $ PGDATA stop 
  1. Déplacer le répertoire de l'ancien vers le nouveau
 $ mv/old/dir /new/dir

ou

 $ cp -r/old/dir /new/dir[.______________$$ rm -rf /old/dir
  1. Changer le lien du tablespace vers un nouveau répertoire
 $ cd $ PGDATA/pg_tblspc 
 $ rm 24580 
 $ ln -s/new/dir 24580 
  1. Démarrer les postgres
 $ pg_ctl -D $ PGDATA start 

Ensuite, vous pouvez voir que le répertoire du tablespace a changé.

 test = # SELECT pg_tablespace_location (24580); 
 pg_tablespace_location 
 ------------------------ 
 /new/dir[.____.[(1 ligne) 
12
shx