2016年12月3日土曜日

【PGConf.Asia】Windows版PostgreSQLのインストール

ここでは、PostgreSQLを初めてインストールする方向けに、Windows環境での手順を説明します。

■インストーラーの準備と対象バージョンについて


現時点の最新版、PostgreSQL 9.6.1を対象にします。
Windowsへの対応は、64bitのサーバーOS(最近だとWin 2008以降ぐらいだろうか?)とか、32bitのWindows 7,8とか10では実績があると思います。これといって細かいOS側に対する要件は無くて、PostgreSQLの開発コミュニティでは構築テストをして実績のあるものが公開されているような感じです。

ただし、商用版PostgreSQLであるEDB PostgresはサーバーOSのみに対応し、つまり現行の64bit機のみに対応するように、ここ数年で変わってきています。インストーラーが提供されているかどうかというレベルで、32bit環境では将来を気にしておくべきだと思います。

Windows版のインストーラーは、上記のEDB Postgresを作っていてPostgreSQL自体の機能・性能向上にも大きく貢献しているEnterpriseDB社が作成し、公開しています。ここから自分が該当するインストーラーをダウンロードしておきます。
また、日本PostgreSQLユーザ会のwebサイトでは、各OS向けのインストーラ、yum(rpm)やaptパッケージ、ソースコードへのリンクを記載しており、こちらから辿るのも簡単です。



■インストーラの実行


Windows機では、Administrator権限を持ったOSユーザでインストーラーを実行します。
このとき、UAC(ユーザーアクセス制御:Windowsのセキュリティ機能)は弱くしておかないと起動に失敗することがあります。(正確にどうしたらいいか、試していないので忘れた・・・まあ、失敗したら変更すればよいよね?)

インストーラーを実行すると、以下のように次々値を指定していくことになるのですが・・・



画面キャプチャを次々と載せるのでも良いのですが、各項の解説をしておくほうが大事だと思いますので、PostgreSQL用語満載ですが、ご容赦ください。勉強しましょう!

インストール先 (Installation Directory)

PostgreSQLをインストールするフォルダです。デフォルトはProgram Filesの下。この何階層か下にbinディレクトリがあり、そこにPostgreSQLのコマンドが配置されますので、後でbinに環境変数PATHを通しておくとよいでしょう。

データディレクトリ(Data Directory)

PostgreSQLのデータファイルおよび管理ファイルの配置先です。デフォルトはインストールしたフォルダ配下が使われますが、データ領域であるためディスク容量や性能の問題で専用のストレージ領域を指定することが多いです。

WALについて

これまでのバージョンでは、データディレクトリと併せてWALディレクトリ位置を聞かれていました。
WALはデータベースに対する変更の歴史を記録するファイルで、これをある時点の断面に次々適用することで最新状態まで戻す用途で保持されます。
WALがデータディレクトリと物理的に同じディスクに配置されていると、ディスク障害時の復旧に必要なWALまで失われており泣き寝入りするしかありません。というわけなのですが、最近のディスク領域はRAID構成になっていたりするのが普通なので入力を省いたのでしょうか。
WALの位置を変更するには、最後まで構築が済んだ後にごにょごにょします。(ここでは扱わない。)

ユーザーとパスワード

インストーラで入力を求められるのは、「postgres」というデーベース内に一人必ず作成される管理者ユーザーのパスワードです。
ただし、同名/同パスワードのOSユーザーを勝手につくろうとするので、OS側のセキュリティポリシー設定が厳しかったりすると、パスワードがポリシーに違反してる旨のメッセージが出てしまい、それはOS側の制約だったりするのでインストール中の作業者には心当たりがなく、ハマることがあります。

ポート番号

PostgreSQLがクライアントからの通信を待ち受けるポートを指定します。デフォルトは5432です。
あとからでも変更できるので影響は小さいです。既存のポートとバッティングしないようチェックが入りますので、警告がでなければ進めて問題ありません。

上位設定(Advanced Options)

ロケールはデフォルトではなく、「C」にすることを推奨します。
ロケールで地域を指定すると、その言語の並び順でソートされたりして、特にソート時のパフォーマンスでは大きな差が生じるようです。「C」でのソート順は、UTF-8など使用している格納文字コードのコード順になります。

全て入力して、「Next」を押すとインストールが開始されます。


■データベースクラスタの再作成(必要に応じて)


出来上がったデータベースは、環境によって格納文字コードがASCIIになっている場合があり、日本語を格納できません。その場合、日本語を格納するにはデータベースクラスタ作成時に指定するエンコードを「UTF-8」などにしなければなりません。
インストーラが内部で勝手に実行してくれたデータベースクラスタ作成時のオプション指定がイケてないんですね。というわけで再作成します。

データベースの停止

インストーラーが終了した時点で、データベースが起動していますので、不正なステータスのまま壊してしまわないよう停止しておきます。Windowsでは「サービス」からデータベースの起動・停止を操作します。

データディレクトリの削除

インストーラーで指定したデータディレクトリ配下には、データファイル、WALファイル、各種パラメータ設定ファイル、DBの状態を管理するファイルなどが一式格納されていて、でも再作成したいいまとなってはこれが邪魔な存在なのでフォルダごと一括で消します。

データディレクトリの初期化

同じ意味の言葉で、「initdb」「データベースクラスタの初期化」 などと表現されますが、削除したデータディレクトリをまるっと新たに作り直してくれるinitdbというコマンドがありますので、それを実行してデータディレクトリを作ります。この時に指定するオプションで、問題のエンコードを指定したり、WALファイルの位置を指定したりカスタマイズが効きます。

> initdb -D <データディレクトリ位置> -E UTF8 --no-locale

データベースの起動

手動でinitdbしたあとは、データベースの起動が必要です。
WindowsのサービスからPostgreSQLを探し、起動します。

この時、データディレクトリの位置が最初と変わっていると、サービススクリプトの作り替えも必要になりますが、応用なので今回はそのようなケースは扱いません。


これで、PostgreSQLのインストールは完了です。
テーブルを作ってデータを入れるには、もう少し作業があって、ユーザやデータベースの作成、認証のための設定が必要です。 以降の手順はOSプラットフォームやディストリビューションによらず、PostgreSQLの初期設定一般になりますので、別記事に整理します。

0 件のコメント:

コメントを投稿

PostgreSQL11のJITコンパイリングを試す

llvm-postgres 開発中のPostgreSQL11でJIT(Just In Time=実行時)コンパイリングを行い、クエリ性能の高速化を期待する新機能が登場した。 本記事では 構築方法を確認したので紹介。JITコンパイ...