diadia

興味があることをやってみる。自分のメモを残しておきます。

windows postgresqlのデータのディレクトリを変更したい

postgresqlwindowsにインストールする場合

windowsの場合はインストーラーを起動するとdataの置き場所をウィザードに従って自分で指定することができた。 しかしながらインストール後にデータディレクトリを変更(新たにデータクラスタも作成)する場合にはどのように実行するのかわからない。どうすればよいのか

memoを残しておく

まずservices smcでpostgresqlを見ると、実行ファイルパスは以下のようになっていた。

"C:\Program Files\PostgreSQL\11\bin\pg_ctl.exe" runservice -N "postgresql-x64-11" -D "C:\pgdata\11" -w

で、 -Dはデータの読込み先を表す。またpg_ctl.exeはpostgresqlのサービスの起動、停止、再起動を実行するためのコマンドである。だからdataの読込み先を新しく作ったdataの場所に変更してpostgresqlを起動しなおせば、新しいデータクラスタでdataを書くことができると思っていた。だが今のところできない・

成功した方法

 


現在稼働しているpostgresqlのサービスを停止する。これはservices mscを使ってpostgresqlの停止を行った。その他の方法としてGUIではなくCUI

pg_ctl stop -U postgres

でやることができると思う。

ドロップボックス上にpostgres_dataディレクトリを作成した。
ここにテーブルやテーブルデータを入れることになる。 ディレクトリを作成しただけなので、このディレクトリをデータベースクラスタ化する。これはinitdbコマンドを使う。

initdb --encoding=UTF8 --no-locale --username=postgres -W -D "C:\Users\USER\Dropbox\postgres_data"
#コマンドの結果
データベースシステム内のファイルの所有者は"USER"となります。
このユーザがサーバプロセスも所有する必要があります。

データベースクラスタロケール"C"で初期化されます。
デフォルトのテキスト検索設定はenglishに設定されました。

データベージのチェックサムは無効です。

新しいスーパユーザのパスワードを入力してください:
再入力してください:

既存のディレクトリC:/Users/USER/Dropbox/postgrestestの権限を修正します ... 完了
サブディレクトリを作成します ... 完了
max_connectionsのデフォルト値を選択します ... 100
shared_buffersのデフォルト値を選択します ... 128MB
selecting default timezone ... Asia/Tokyo
動的共有メモリの実装を選択します ... windows
設定ファイルを作成します ... 完了
ブートストラップスクリプトを実行します ... 完了
ブートストラップ後の初期化を行っています ... 完了
データをディスクに同期します...完了

警告: ローカル接続で"trust"認証を有効にします。
この設定はpg_hba.confを編集するか、次回のinitdbの実行の際であれば-Aオプ
ション、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。

成功しました。以下のようにしてデータベースサーバを起動できます。

    pg_ctl -D ^"C^:^\Users^\USER^\Dropbox^\postgrestest^" -l <ログファイル> start

次にpostgresqlを稼働させる。これはpg_ctl start コマンドで動かす事ができる。

pg_ctl start -U postgres -D "C:\Users\USER\Dropbox\postgres_data" -w

これで動かすことができた。 参考http://koshian2.hatenablog.jp/entry/2018/02/17/213446

https://kenpg.bitbucket.io/blog/201506/04.html