Déplacer un tablespace Postgres
Par zokar le vendredi, mai 13 2011, 16:20 - Sysadmin - Lien permanent
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