忍者ブログ
[1] [2] [3]

DATE : 2017/11/19 (Sun)
×

[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

DATE : 2006/08/12 (Sat)

pg_hba.conf ファイルを編集すると、クライアントがデータベースサーバにアクセスする際の認証方式を設定することができます。(通常、pg_hba.conf は、データディレクトリ直下にあります)

何も設定していない場合の pg_hba.conf は次のようになっています。(Windows XP SP2 上の PostgreSQL 8.14 の場合)

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

ここで、それぞれの列は次のような内容となっています。

TYPE
接続方法を表します。host は、TCP/IP 接続を表しています(ただし、通常は localhost からの TCP/IP 接続のみ行えます)。
DATABASE
認証の対象とするデータベースの名前を表します。all は、全てのデータベースを表します。
USER
認証の対象とするユーザ(ロール)の名前を表します。all は、全てのユーザ(ロール)を表します。
CIDR-ADDRESS
認証の対象とする IP アドレスの範囲です。上の例では、PostgreSQL サーバを実行しているマシン自身の IP アドレスを表しています。
METHOD
認証方式を表します。trust は、認証を行わない、つまり、パスワードなしでデータベースサーバにアクセスできることを表します。

ここで、ローカルからのアクセスでも認証を行うには、上の設定を次のように変更します。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

各設定の METHOD を、trust から md5 に変えました。こうすることで、パスワード認証を行うことができます。なお、md5 とは、クライアントとサーバの間でパスワードを暗号化してやりとりする方式です。ちなみに、password と設定すると、パスワードを平文でやりとりします。(他の方法は、参考文献を参照してください)

1人でデータベースを扱う場合は Trust 認証でもよいのですが、複数人で扱う可能性のある場合は、パスワード認証にした方がよさそうです。

参考文献

忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
10 2017/11 12
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
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
10 2017/11 12
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
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)