PostgreSQL のデータディレクトリを外付けHDDに移す

背景

Raspberry Pi 4 (8GB) を購入し、PostgreSQL のサーバにしたいと思いました*1。MicroSDの容量は限られているのと、データベースのようなアクセス頻度が高いものをMicroSDに置いた場合のカードの寿命を考え*2、外付けHDDにデータを置きたいと考えました。

環境

$ uname --all
Linux yellowmoon 5.4.0-1018-raspi #20-Ubuntu SMP Sun Sep 6 05:11:16 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"

方法

以下の手順を踏みます。なお、外付けHDDをマウントしたディレクトリを /mnt/foobar とします。

1. PostgreSQL を一旦止める

$ sudo service postgresql stop

2. 既存のデータディレクトリを外付けHDDに移す

パーミッションも一緒に移します。念のため、元データは残したままにしておきましょう。

$ sudo rsync -avuz /var/lib/postgresql /mnt/foobar

3. postgresql.conf に書いてある data_directory の項目を書き換える

postgresql.conf の場所はインストールされている PostgreSQL のバージョンにより異なります。バージョンが 12 の場合は以下の場所になります。

  • /etc/postgresql/12/main/postgresql.conf

上記のファイルを編集します。data_directory の箇所をデフォルトの場所から外付けHDDの場所に変更します。postgresql/12/main まで含むことに注意です(postgresql までで終わりにしない)。

data_directory = '/mnt/foobar/postgresql/12/main'

4. PostgreSQL を起動します

無事起動できれば OK です。

$ sudo service postgresql start

補足

ユーザディレクトリも外付けHDDに置いておくといろいろと安心で便利です。

*1:あまり推奨されませんが

*2:そうでなくても、ラズパイのMicroSDは壊れるものと思っておくほうがいいです

Powered by はてなブログ