忍者ブログ
[133] [132] [131] [130] [129] [128] [127] [126] [125] [124] [123]

DATE : 2017/12/12 (Tue)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/08/13 (Sun)

ある日データディレクトリのある C ドライブの空き領域を確かめてみました。すると、残り600MB程度しかありません。そこで、空いている別のドライブへとデータディレクトリを移動しようと思い立ちました。

実際はもっとスマートな方法があるのかもしれませんが、とりあえずこの方法でできたので、忘れないうちにメモしておこうと思います。

なお、PostgreSQL のバージョンは 8.1.4、OS は Windows XP Home Edition SP2 を対象としています。

大まかには、次のような手順になります。

  1. データベースをファイルに書き出す
  2. データベースクラスタを新たに作成する
  3. PostgreSQL データベースサーバのサービスを修正する
  4. データベースクラスタにデータベースを復元する
  5. 古いデータベースディレクトリを削除する

データベースをファイルに書き出す

PostgreSQL の全データベースを書き出すために、pg_dumpall コマンドを使います。例えば、db.out ファイルにデータベースを書き出すには、次のようにコマンドを実行します。(ここで、行頭の「>」はプロンプトを表します)

> pg_dumpall > db.out

データベースクラスタを新たに作成する

データベースクラスタとは、1つのサーバで管理されるデータベースの集まりのことを言います。ここでは、別のドライブに新しいデータベースクラスタを作成します。

具体的には、initdb コマンドを使用してデータベースクラスタを作ります。

ただし、initdb は管理者権限のあるユーザでは起動できません。PostgreSQL では、セキュリティ上の理由から、管理者権限ではデータベースサーバに関わる処理を実行できません。

しかし、Windows 版の PostgreSQL の場合、インストール時に PostgreSQL 用のアカウントが作られています。初期設定では postgres なので、ここでは postgres アカウントとします。そのため、initdb を postgres アカウントで実行します。

具体的には、postgres アカウントで起動したコマンドプロンプトで initdb を実行することになります。スタートメニューからの場合は、コマンドプロンプトのところで右クリックメニューを開き、「別ユーザとして実行(A)...」で起動します(もしくは、runas コマンドで別ユーザとしてのコマンドプロンプトを開きます)。

D ドライブ直下の data フォルダをデータディレクトリにする場合は、次のようにコマンドを実行します。(ただし、data フォルダは未作成か、空でなければなりません)

> initdb -D d:/data -E UTF8 --locale=C -U postgres

-d オプションはデータディレクトリ、-E オプションはデータベースクラスタの文字エンコーディングを表します。

PostgreSQL データベースサーバのサービスを修正する

ここで、PostgreSQL データベースサーバが起動している場合は、停止させておきます。

コントロールパネルからサービスの一覧を開き、「PostgreSQL Database Server 8.1」のプロパティ内にある「実行ファイルのパス」欄を見ると、-D オプションに移動前のデータベースディレクトリのパスが設定されています。そのため、-D オプションの設定を、新たに作成したデータベースディレクトリに設定し直します。

しかし、「実行ファイルのパス」欄は編集不可になっています。そこで、レジストリから「実行ファイルのパス」を編集します。

スタートメニューの「ファイル名を指定して実行(R)...」で、「regedit」と入力してレジストリエディタを起動します。

レジストリの「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pgsql-8.1」の「ImagePath」を変更します。

変更後、「PostgreSQL Database Server 8.1」を起動できれば、変更は完了です。

データベースクラスタにデータベースを復元する

次のコマンドを実行して、新しいデータベースクラスタにデータベースを復元します。

> psql -U postgres -f db.out

db.out には postgres ユーザの情報も格納されています。そのため、postgres ユーザが重複しているといったエラーが出るかもしれませんが、無視しても構いません。

移動前のデータベースディレクトリを削除する

移動前のデータベースディレクトリを、そのまま単純に削除します。これで、作業は完了です。

参考文献

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)