PostgreSQL のポータブル版をインストールする
はじめに
PostgreSQL は、オープンソースのリレーショナルデータベースとして世界中で最もよく利用されているソフトウェアの一つです。PostgreSQL を Windows PC にインストールする場合、公式ウェブサイトからダウンロードしたインストーラを使用すると、管理者権限が必要となり、Windows のシステムに変更が加えられてしまいます。この記事では、このような制約がなく、USBメモリ等に入れて持ち運びが可能なポータブル版をインストールする方法を説明します。
PostgreSQL Poratble
PostgreSQL Poratble は、ポータブル、導入容易、軽量を特徴とする PostgreSQL のサーバおよびクライアントプログラムです。
2022年9月時点の最新版は、PostgreSQL Ver.12.4(ファイル名は pgsql 12.4-1 Windows.zip) です。上記サイトからダウンロードできます。
インストール
インストールは、ダウンロードしたファイルを 7-Zip 等の解凍ツールで適当なフォルダに展開するだけです。ただし、トラブルを避けるため、フォルダ名および上位のパス名に日本語文字と空白文字が含まれないようにしてください。この記事では、C:\portable\pgsql に展開したものとして説明します。展開したフォルダ中の主な内容は、以下のようになっています。
- binフォルダ: 各種プログラム
- dataフォルダ: データベースおよび設定情報
- pgAdmin4フォルダ: GUIクライアントプログラム
- *.batファイル: 起動用スクリプトファイル
初期設定
基本的には、展開後すぐにサーバを起動して利用することが可能になっています。しかし、文字コードが西欧言語の Windows-1252 になっているため、日本語は使用できません。そこで、以下の手順によりデフォルトのデータベースを初期化し直します。
- コマンドプロンプトを起動する
- インストールしたフォルダに移動する
cd \portable\pgsql
- 既存のdataフォルダを別の名前に変更する(削除しても構わない)
ren data data.bak
- initdbコマンドで、新しいデータベースを UTF8 で初期化する
bin\initdb.exe -U postgres -E utf8 -D data
ここで、設定している情報は以下の通りです。
- データベース管理者名: postgres(パスワードなし)
- デフォルト文字コード: UTF-8
- データベースフォルダ: data
initdbコマンドの実行結果は、以下のようになります。
C:\portable\pgsql>bin\initdb.exe -U postgres -E utf8 -D data
データベースシステム内のファイルの所有者はユーザ"*****"となります。
このユーザをサーバプロセスの所有者とする必要があります。
データベースクラスタはロケール"Japanese_Japan.932"で初期化されます。
initdb: could not find suitable text search configuration for locale "Japanese_Japan.932"
デフォルトのテキスト検索構成は simple に設定されます。
データベージのチェックサムは無効です。
ディレクトリdataを作成しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... windows
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok
initdb: 警告: ローカル接続に対して"trust"認証を有効にします
pg_hba.confを編集する、もしくは、次回initdbを実行する時に -A オプション、
あるいは --auth-local および --auth-host オプションを使用することで変更する
ことがきます。
成功しました。以下のようにしてデータベースサーバを起動することができます:
bin/pg_ctl -D data -l ログファイル start
メッセージに表示されているように、ローカル接続に対してパスワードなしでの接続が可能になっています。なお、initdbコマンドの詳細は以下のマニュアルを参照してください。
サーバの起動
PostgreSQLサーバの起動は、コマンドプロンプトまたはマウスのダブルクリックで以下の起動用スクリプトを実行します。このスクリプト中で、pg_ctlコマンドが実行されます。
PostgreSQL-Start.bat
起動すると、PostgreSQLのバージョン番号、クライアントと通信するためのIPアドレスとポート番号が以下のように表示されます。
C:\portable\pgsql>"C:\portable\pgsql\bin\pg_ctl.exe" start -D "C:\portable\pgsql\data"
サーバの起動完了を待っています....2022-08-22 15:28:12.269 JST [13188] LOG: PostgreSQL 12.4, compiled by Visual C++ build 1914, 64-bit を起動しています
2022-08-22 15:28:12.423 JST [13188] LOG: IPv6アドレス"::1"、ポート5432で待ち受 けています
2022-08-22 15:28:12.423 JST [13188] LOG: IPv4アドレス"127.0.0.1"、ポート5432で 待ち受けています
.2022-08-22 15:28:12.846 JST [26944] LOG: データベースシステムは 2022-08-22 15:26:09 JST にシャットダウンしました
2022-08-22 15:28:13.569 JST [13188] LOG: データベースシステムの接続受け付け準備が整いました
完了
サーバ起動完了
このウィンドウは、サーバを終了させるまで閉じないようにしてください(最小化することは可能)。また、サーバを終了する際には、このウィンドウを直接閉じるのではなく、以下のサーバ停止用スクリプトを使用してください。pg_ctlコマンドでサーバを安全に終了させることができます。
PostgreSQL-Stop.bat
クライアントの起動
クライアントには、コマンドラインで利用可能な psql と GUIクライアントの PgAdmin4 が用意されています。
psql を使用する場合は、以下の手順でサーバに接続します。
- コマンドプロンプトを起動する
- インストールフォルダに移動する
cd \portable\pgsql
- postgresユーザで psql を起動する
bin\psql -U postgres
以降、psqlのコマンドは先頭にバックスラッシュ(\
)、SQL文は末尾にセミコロン(;
)を付けて入力してください。\q
を入力すると終了します。以下は動作例です。
C:\portable\pgsql>bin\psql -U postgres
psql (12.4)
"help"でヘルプを表示します。
postgres=# help
PostgreSQL へのコマンド ライン インターフェイス、psql を使用しています。
ヒント: \copyright とタイプすると、配布条件を表示します。
\h とタイプすると、SQL コマンドのヘルプを表示します。
\? とタイプすると、psql コマンドのヘルプを表示します。
\g と打つかセミコロンで閉じると、問い合わせを実行します。
\q で終了します。
postgres=# \conninfo
データベース"postgres"にユーザ"postgres"として、ホスト"localhost"(アドレス"::1")上のポート"5432"で接続しています。
postgres=# \q
psql の使用方法の詳細については、以下のマニュアルを参照してください。
PgAdmin4
PgAdmin4の起動は、コマンドプロンプトまたはマウスのダブルクリックで以下の起動用スクリプトを実行します。このスクリプトによって、専用のアプリケーションサーバとブラウザが立ち上がります。
PgAdmin4.bat
起動に成功すると、以下のようなパスワード入力画面が表示されます。なお、PgAdmin4 の新しいバージョンがあることを示す警告メッセージが表示されますが、これは無視してください。
ここで入力するパスワードは、PostgreSQL のパスワードではなく、PgAdmin4 の設定内容を保護するためのパスワードです。省略はできないので、任意のパスワードを必ず入力してください。
PgAdmin4 の初期画面が表示されたら、Quick Links の Add New Server をクリックしてください。ダイアログボックスに、以下の情報を入力します。
- Generalタブの Name欄: 任意の名前(例えば、localhost)
- Connectionタブの Host name/address欄: localhost または 127.0.0.1
- Connectionタブの Port欄: 5432
- Connectionタブの Maintenance database欄: postgres
- Connectionタブの Username欄: postgres
- Connectionタブの Password欄: 空白のまま
最後に Saveボタンをクリックするとサーバに接続します。
PgAdmin4 のメニューは日本語化することができます。Fileメニューの Preferences をクリックして、ダイアログボックスが表示されたら、Miscellaneous の User language をクリックし、右側に表示されるリスト中から Japanese を選択します。また、初期画面の Quick Links の Configure pgAdmin からも設定できます。
Saveボタンをクリックして設定情報を保存します。この時点では、表示はまだ元のままですが、ブラウザのリロード(再読み込み)を行うと表示が日本語になります。
PgAdmin4 を終了する場合は、画面左側の browser でサーバ localhost を選択した状態で、Objectメニューの Disconnect Server を実行した後、Windowsのタスクバーのインジケータにある PgAdmin4アイコン(青い象の顔)を右クリックして、Shut down server を実行してください。PgAdmin4 の詳しい使い方は、以下に記載されています。
トラブルシューティング
サーバの起動に失敗する原因としては、以下が考えられます。
-
インストール場所が不適切
インストールした場所が、半角英数字以外の文字が使用されたフォルダの配下にあると、起動しない場合があります。特に、C:\Program Files や C:\ユーザー(デスクトップやドキュメントフォルダが含まれる) は要注意です。別の場所にインストールしましょう。 -
ポート番号が競合
PostgreSQL のデフォルトのポート番号は 5432 です。この番号を他のプログラムが使用している場合は、別の番号に変更する必要があります。ポート番号は、pgsql\data\postgresql.conf で設定されています。変更した場合は、サーバの再起動とクライアントの再設定が必要になります。 -
別の PostgreSQLサーバ が動作中
誤ってサーバを二重に起動した、サーバがまだ終了していないのに新たなサーバを起動した場合等に、この状態になります。しばらく待っても状態が変わらない場合は、Windowsのタスクマネージャで動作中のPostgreSQLサーバを強制終了させてください。
サーバが起動しても、クライアントの接続に失敗する原因としては、以下が考えれれます。
-
クライアント側の設定ミス
ポート番号、データベース名、ユーザ名、パスワードのいずれかに誤りがあると、クライアントからの接続要求を拒絶したり、無応答になったりします。これらが正しいものになっているか確認しましょう。 -
サーバがビジー状態
サーバが異常終了して再起動した場合等に、破損したデータベースを修復するため、しばらくサーバがクライアントからの接続要求を受け付けないことがあります。しばらく待っても状態が変わらない場合は、データベースを初期化して、再構築してください。 -
別マシンからの要求
サーバが起動しているマシン(localhost)とは異なるマシンから接続する場合は、サーバ側での追加の設定が必要になります。設定方法の説明は省略しますが、pgsql\data\postgresql.conf と pgsql\data\pg_hba.conf の 2つのファイルを書き換える必要があります。
おわりに
この記事では、Windows PC 上で PostgreSQL Portable をインストールしてサーバを起動する方法と、psql と PgAdmin4 という二種類のクライアントからサーバに接続する方法を説明しました。次回は、PgAdmin4 での基本的なデータベースの操作について説明する予定です。
Discussion