「ま、ここでいいか」と適当なディレクトリにPostgreSQLのデーブルスペースを作って後悔した場合の対処法

オリジナルの記事はこちら


ディレクトリ`/usr/local/pgsql/tblspc`に作った`tblspc`を、`/home/postgres/tblspc`に移す。

[1] テーブルスペース`tblspc`のOidを調べる
testdb=# SELECT oid,spcname FROM pg_tablespace WHERE spcname = 'tblspc';
  oid  | spcname 
-------+----------
 24580 | tblspc
(1 row)
[2] PostgreSQLを止める
postgres$ pg_ctl -D $PGDATA stop
[3] ディレクトリを移動する
postgres$ mv /usr/local/pgsql/tblspc /home/postgres/tblspc

or

postgres$ cp -r /usr/local/pgsql/tblspc /home/postgres/tblspc
postgres$ rm -rf /usr/local/pgsql/tblspc
[4] pg_tblspc以下のリンクを張り替える
postgres$ cd $PGDATA/pg_tblspc
postgres$ rm 24580
postgres$ ln -s /home/postgres/tblspc 24580
[5] PostgreSQLを起動する
postgres$ pg_ctl -D $PGDATA start

以下の関数でテーブルスペースの新しいディレクトリが確認できる。

testdb=# SELECT pg_tablespace_location(24580);
  pg_tablespace_location
--------------------------
/home/postgres/tblspc
(1 row)