Déplacer un tablespace Postgres

Dans ce post, un tuto pour vous expliquer comment bouger un tablespace placé au mauvais endroit, sans perdre les données

Cette opération doit se faire avec un arrêt de Postgres. Assurez-vous de faire cette opération quand vos utilisateurs soient impactés.

La première opération consiste à stopper Slony (si vous l'utilisez)

root@> /etc/init.d/slony stop

Ensuite, stopper Postgres :

root@> /etc/init.d/postgresql stop

Une fois fait, lister le contenu du répertoire /var/lib/postgresql/9.0/main/pg_tblspc/

root@> ls -l /var/lib/postgresql/9.0/main/pg_tblspc/
rwxrwxrwx 1 postgres postgres 28 Apr 22 14:17 16398 -> /DATA/

Nous voyons que mon tablespace est créé directement dans /DATA, le point de montage de mes données. Il se trouve que, pour bien cloisonner mes données, je dois créer un tablespace supplémentaire pour un second site que je dois créer.

Il faudrait donc que j'aie un dossier /DATA qui soit comme suit

  • /DATA/site1/
  • /DATA/site2/

Une fois Postgres bien stoppé, créez vos répertoires

root@> mkdir /DATA/site1
root@> mkdir /DATA/site2

Une fois fait, déplacez les données de Posqtgres de la racine de /DATA dans /DATA/site1

root@> mv /DATA/PG_9.0_* /DATA/site1

Recréez le lien symbolique dans /var/lib/postgresql/9.0/main/pg_tblspc/ pour qu'il pointe sur le nouveau répertoire

root@> cd /var/lib/postgresql/9.0/main/pg_tblspc/
root@/var/lib/postgresql/9.0/main/pg_tblspc/> rm -f 16398
root@/var/lib/postgresql/9.0/main/pg_tblspc/> ln -s /DATA/site1 16398

Donnez bien les droits à postgres d'accéder à ce répertoire

root@> chown postgres:postgres /DATA/site{1,2}
root@> chmod 700 /DATA/site{1,2}

Il ne vous reste plus qu'une chos à faire : modifier la table postgres qui contient le chemin de votre tablespace à titre "informatif"

root@> /etc/init.d/postgres restart
root@> su - postgres
postgres@> psql
psql =# select * from pg_tablespace;
    spcname     | spcowner |         spclocation          | spcacl | spcoptions 
----------------+----------+------------------------------+--------+------------
 pg_default     |       10 |                              |        | 
 pg_global      |       10 |                              |        | 
 mes_datas      |       10 | /DATA                        |        | 

psql =# update pg_tablesapce set spclocation='/DATA/site1' where spcname='mes_datas';
UPDATE 1
psql =# exit

Et voila, il ne vous reste plus qu'à redémarrer Soly si vous l'utilisez

root@> /etc/init.d/slony start

Et voila ! Vous pouvez maintenant créer un nouveau tablespace !

Bonne utilisation

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet