windows postgresqlのデータのディレクトリを変更したい
postgresqlをwindowsにインストールする場合
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