インストール後にデータの保存先を変更する

PostgreSQL

このカテゴリーでは競馬予想プログラミング以外でも役に立つ、PostgreSQLの汎用的な技術について解説します。

データベースに適したストレージとは

SSDの寿命

買ってからまだ2年しか経ってないパソコンが突然壊れたんですよ。原因はSSDの寿命。壊れるまでに、次のような順序で予兆がありました。

  1. パソコンの動作が重くなってくる
  2. ブルースクリーンが頻発する
  3. 突然シャットダウンする

Cドライブの空き容量には余裕があったから、ブルースクリーンが頻発するところまで警戒してなかったんですよ。初めての経験だったし。

慌てて新しいパソコンを買いに行って、最低限のソフトをインストールして、PostgreSQLを再構築しました。でも、その後で気づいたんですけど、そもそもSSDにデータベースを構築するのは間違いなんですよね。

TARGET」みたいにデータの登録と検索だけで使うなら、空き容量をそのまま信じてSSDでも良いと思います。

SSDの寿命はだいたい5年くらいって説が有力なんですが、競馬予想の研究のために毎日PostgreSQLでレコードの登録と削除を繰り返しまくってたせいで、たった2年で1TBのSSDが壊れました。

データベースに適したHDD

SSDは書き込み回数に限度があるため、頻繁な書き込みが続くと劣化が早まり、故障リスクが高まります。また、SSDは故障時のデータ回復が難しく、データが突然消失するリスクもあります。これらの理由から、データベースの用途には耐久性が高く、コスパに優れたHDDが推奨されます。

ってことで、NAS(ネットワークHDD)にdataフォルダの保存先を変更することにしました。

NASへの変更には注意が必要です。SSDと比べると処理速度が遅くなり、時間のかかるクエリにギブアップしてエラーを返すこともあります。そのため、よく検討し、自己責任で行ってください。

NASが遅すぎたため後日、大容量の外付けSSDに変更しました。管理人@PC-KEIBAが選んだNASの話ですが、全てのNASがデータベースに不向きというワケではないと思います。

dataフォルダの保存先を変更する手順

この記事では、PostgreSQLのインストール後に、データの保存先を変更する手順を紹介します。Windowsでのやり方です。

PostgreSQLのサービスを停止する

Windowsサービスを開いて、PostgreSQLのサービスを停止します。

Windowsサービスを開く方法については、お使いのパソコン(OS)に適した方法を見つけるために、次のGoogleの検索結果を参考にしてください。→Windows サービス 開き方

■PostgreSQLのサービス名

postgresql-x64-11

dataフォルダをコピーする

Windowsエクスプローラーを使って、新しい保存先にコピー(コピー→貼り付け)します。

移動(切り取り→貼り付け)すると、PostgreSQLが動きません。

■コピー元(インストール時に設定した初期値)

C:\Program Files\PostgreSQL\11\data

■コピー先(NASに作成した保存先)

L:\PostgreSQL\data

レジストリを修正する

dataフォルダをコピーしたら、レジストリエディターを開いて、次のレジストリキーの値を変更します。

■レジストリキー

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-11\ImagePath

レジストリエディターを開く方法については、お使いのパソコン(OS)に適した方法を見つけるために、次のGoogleの検索結果を参考にしてください。→レジストリエディター

-D の引数を変更します。

■変更前(インストール時に設定した初期値)

-D "C:\Program Files\PostgreSQL\11\data" -w

■変更後(NASに作成した保存先)

-D "L:\PostgreSQL\data" -w

PostgreSQLのサービスを開始する

Windowsのサービスを開いて、PostgreSQLのサービスを開始します。もしうまくいかない場合は、次節を参照してください。

SQLエディタで確認する

最後に、SQLエディタでデータが見れるか確認してください。コピー元にあったテーブルを開けばOKです。

PostgreSQLのサービスが停止した場合

PostgreSQLに接続できなくなったら、PostgreSQLのサービスが停止している。NASに配置した場合は、ローカルのWindowsサービスでは開始できない。コマンドプロンプトで次のコマンドを実行すればOK。1回目で失敗したら、続けて2回目を実行すればOK。バッチファイルを作っておけば便利。

cd C:\Program Files\PostgreSQL\11\bin
pg_ctl -D "L:\PostgreSQL\data" restart

コマンドプロンプトを閉じるとサービスも停止しますので、開いたままにしておいてください。