PostgreSQLをWindowsにインストールするには

PostgreSQLをWindowsにインストールする手順について少し詳しく説明します。Red Hat系Linuxへのインストールについては[こちら](https://qiita.com/tom-sato/items/e1903cb974fb6c6d5664)の記事を参照してください。

説明は基本的にPostgreSQL 17、Windows 11を対象にしますが、バージョンで異なる部分はなるべく補足します。

# PostgreSQLのインストール

PostgreSQLのインストール方法はいくつかあります。おもな方法は以下のとおりです。

* ソースコードからビルド
* バイナリのzipアーカイブを使う
* インストーラを使う

とくにこれといった理由がない限り、インストーラを使うのがよいでしょう。

ソースコードからのビルドは、Windowsでもできなくはないですが、Linux以上に手間がかかる上、Windowsの知識も必要になります。PostgreSQL自体を開発したり、ビルド時のオプションを変更したりする場合でもなければ、やめておいたほうがよいでしょう。

また、バージョン 11以降では32ビットバイナリが配布されていないので、32ビットバイナリが必要な場合にはソースコードからのビルドが必要です。

バイナリのzipアーカイブは、インストーラでインストールされるバイナリをzip形式でまとめたファイルです。PostgreSQLを同梱したアプリケーションを配布する際、独自のインストーラに組み込む場合などに使います。

zipアーカイブを使ってインストールした場合には、インストーラで行われるデータベースクラスタの作成や追加ソフトのインストールは手動で行う必要があります。

ここでは、インストーラを使ってインストールします。

# インストーラのダウンロード

インストーラはEDB社によって提供され、以下のページからダウンロードできます。

**Download PostgreSQL**
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

上記のページでOS、バージョンに応じたインストーラをダウンロードします。

![setup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/697a7445-ca7e-40b4-80e0-c2bc6ace11ff.png)

ここでは、Windows 11にバージョン17をインストールするので、「Windows x86-64」と「17.x」が交わったところの :arrow_down: をクリックします。

![setup-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/9ceeb0e4-9e4b-45d8-afa4-e2906691a8cc.png)

別のページに移動し、しばらく待つと、ダウンロードが開始されます。

# インストーラによるインストール

インストーラのファイル名は`postgresql-17.x-y-windows-x64.exe`で、名前に含まれる`17.x`はPostgreSQLのバージョン番号、`y`はインストーラのリリース番号、`windows-x64`はOSを表します。

![setup-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/403e4dbd-ed42-495f-a7ba-fb0065379783.png)

ファイルをダブルクリックし、インストーラを起動します。

![setup-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/26621857-d5fa-496d-85cc-cbd30e635aad.png)

「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか？」とのダイアログが表示されるので、アプリの名前を確認の上、問題なければ、「はい」をクリックします。

PostgreSQLの動作に必要なMicrosoft Visual C++再頒布可能パッケージがインストールされていない場合には、自動的にインストールされます。

![setup-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/d90a1c50-8573-4017-a1f9-66af30c22716.png)

スプラッシュスクリーンが表示されます。

![setup-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/f708d47e-6d3f-46de-8fa7-84db26dcf49c.png)

しばらく待つと、インストーラが起動されます。「Next」をクリックします。

![setup-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/0a98e604-2e7f-4697-912e-a5c5b483fccd.png)

インストール先のフォルダを指定します。バージョン17だとデフォルトでは`C:\Program Files\PostgreSQL\17`になります。とくに変更の必要はないでしょう。変更する場合はフォルダのパスを直接入力するか、フォルダのアイコンをクリックし、起動されるダイアログでフォルダを選択します。フォルダを指定したら、「Next」をクリックします。

![setup-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/c8892dc0-9c5e-4828-99c9-e00e8f0b7f35.png)

インストールするコンポーネントを選択します。選択できるコンポーネントは以下のとおりです。

| コンポーネント名   | 説明                                                   |
|--------------------|--------------------------------------------------------|
| PostgreSQL Server  | PostgreSQLのサーバ本体                                 |
| pgAdmin 4          | PostgreSQLのGUI管理ツール                              |
| Stack Builder      | PostgreSQLの追加ソフトをインストールするユーティリティ |
| Command Line Tools | PostgreSQLのコマンドラインツールとライブラリ           |

デフォルトではすべて選択されています。PostgreSQLをサーバとして使うなら、少なくとも「PostgreSQL Server」を選択する必要があります。

pgAdmin 4はバージョンが古い場合があり、PostgreSQL 17.4に付属のバージョンは9.0ですが、最新バージョンは9.2になります。最新バージョンを使いたければ、選択を外して個別にインストーしてもよいでしょう。pgAdmin 4のインストール方法は[こちら](https://www.sraoss.co.jp/tech-blog/pgsql/pgadmin4/)の記事を参考にしてください。

ほかはとくに選択を外す必要はないでしょう。選択を外す場合はコンポーネント名の前のチェックボックスをクリックし、チェックを外します。コンポーネントを選択したら、「Next」をクリックします。

![setup-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/eda2d062-403e-4104-9d88-bea76ef7289b.png)

データベースクラスタ作成先のフォルダを指定します。データベースクラスタとはデータベースを格納する領域のことです。デフォルトではインストール先の下の`data`で、バージョン17だと`C:\Program Files\PostgreSQL\17\data`になります。とくに変更の必要はないでしょう。フォルダを指定したら、「Next」をクリックします。

![setup-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/771ca6dc-d1c1-47fd-b10b-fbc203786ef4.png)

スーパーユーザ`postgres`のパスワードを指定します。パスワードは確認のため、同じものを2回入力します。データベースへの接続時に必要になるので、忘れないように注意してください。パスワードを入力したら、「Next」をクリックします。

![setup-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/d0e81552-5814-4450-8ecc-75a5d6991398.png)

クライアントからの接続を受けつけるポート番号を入力します。デフォルトでは5432ポートになります。複数バージョンのPostgreSQLをインストールするなどしていて、すでに5432ポートを使っている場合でもなければ、とくに変更の必要はないでしょう。ポート番号を入力したら、「Next」をクリックします。

![setup-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/7ac5f4df-93da-4aba-8ef3-74cd576a8ce3.png)

デフォルトのロケールを選択します。ロケールは言語や国によって異なる文字の扱いや並び替え順を指定するものです。デフォルトの`[Default locale]`ではOSの設定に基づくロケール、日本語の環境であれば`Japanese_Japan.932`が選択されます。日本語ではロケールを使う必要があまりなく、ロケールを使うと文字の処理が遅くなり、インデックスの作成時にオプションを指定しないと、`LIKE`でインデックスも使えなくなるので、ロケールを使わないことを示す`C`を選択しておきましょう。ロケールを選択したら、「Next」をクリックします。

![setup-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/88c25c1f-33c5-4c0e-b0a0-55f98b424ab2.png)

インストールの設定内容が表示されるので、確認の上、問題なければ、「Next」をクリックします。

![setup-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/2a7a449a-ea9c-4326-8312-31cdc0ab0b7c.png)

これでインストールの準備はできたので、このままインストールするなら、「Next」をクリックします。

![setup-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/60ba7328-9ef1-4538-9576-e63bfccff206.png)

インストールが開始されるので、完了するまでしばらく待ちます。

![setup-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/a1f54bf3-9eb7-4922-80fe-5b00a6dffaad.png)

コンポーネントの選択時に Stack Builder のチェックを外してなければ、インストーラの終了後にStack Builderを起動するかを選択します。デフォルトでは選択されています。あとでいつでも起動できるので、選択は外しておきましょう。起動するかを選択したら、「Finish」をクリックします。起動する場合は[こちら](#stack-builderによる追加ソフトのインストール)を参照してください。

PostgreSQLのインストールはこれで完了です。

# PostgreSQLサービスの起動と停止

PostgreSQLサーバはWindowsサービスとして登録され、起動された状態になっています。また、OSの起動や停止に応じて自動的に起動や停止も行われるようになっています。

サービスを手動で起動や停止を行ったり、設定の変更を反映させるのに再起動したりするには、サービス管理コンソールを使います。サービス管理コンソールを起動するには、スタートメニューの「すべて」から「Windowsツール」を開き、「サービス」をクリックするか、「ファイル名を指定して実行」で`services.msc`と入力します。

![setup-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/c91a60aa-6922-4893-8266-177939cbf770.png)

サービス一覧からPostgreSQLサービスを選択し、右クリックして表示されるメニューから行う操作をクリックします。サービス名は`postgresql-x64-17`で名前に含まれる`17`はPostgreSQLのバージョン番号を表し、64ビットの場合には`-x64`がつきます。

# スタートメニューのPostgreSQLフォルダ

スタートメニューにPostgreSQLフォルダが作成されています。フォルダ名はバージョン17だと「PostgreSQL 17」になります。

![setup-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/145085fc-b4c3-464b-bc73-d9b6ae036f93.png)

フォルダに含まれるショートカットは以下のとおりです。

| ショートカット名          | 説明                               |
|---------------------------|------------------------------------|
| Application Stack Builder | Stack Builderを起動                |
| Installation notes        | インストールノートを表示           |
| pgAdmin 4                 | GUI管理ツールpgAdmin 4を起動       |
| pgAdmin documentation     | pgAdminマニュアルを表示            |
| PostgreSQL documentation  | PostgreSQLマニュアルを表示         |
| PostgreSQL release note   | PostgreSQLリリースノートを表示     |
| Reload Configuration      | 設定ファイルの再読み込みを行う     |
| SQL Shell (psql)          | SQLの実行を行うpsqlを起動          |

インストールノートにはWindowsバイナリの注意点、pgAdminとPostgreSQLマニュアルには各ソフトウェアの使い方、PostgreSQLリリースノートには各バージョンの変更点が英語で書かれています。日本語の情報が必要な場合には、PostgreSQLマニュアルは[日本PostgreSQLユーザ会](https://www.postgresql.jp/)の[PostgreSQL日本語ドキュメント](https://www.postgresql.jp/document/)、PostgreSQLリリースノートは[SRA OSS社](https://www.sraoss.co.jp/)の[PostgreSQL技術情報](https://www.sraoss.co.jp/tech-blog/pgsql/)を参照するのがよいでしょう。

設定ファイルの再読み込みは変更した設定を反映するのに使います。設定ファイルはデータベースクラスタ内に格納されており、`postgresql.conf`でコメントに`(change requires restart)`がついたパラメータは変更の反映に再起動が必要で、それ以外のパラメータや`pg_hba.conf`は設定ファイルの再読み込みで変更を反映できます。

# データベースへの接続確認

最後にデータベースに接続し、データベースの一覧を表示します。それには、スタートメニューのPostgreSQLフォルダ内の「SQL Shell (SQL)」をクリックし、psqlを起動します。

![setup-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/3d9efc81-1e5f-4b70-99cd-20fc8a82b840.png)

接続先のホスト名`Server`、データベース名`Database`、ポート番号`Port`、ユーザ名`Username`、クライアント側のエンコーディング`Client Encoding`、パスワードの入力を求めるプロンプトが順番に表示されます。角カッコ内がデフォルト値を表しており、パスワード以外はデフォルト値のまま何も入力せず、`Enter`キーをタッチしていけばよいです。パスワードはインストール時に指定したものを入力します。

データベースに正常に接続できると、psqlのプロンプト`postgres=#`が表示されます。そこで、`\l`と入力すれば、データベースの一覧が表示されます。データベースクラスタの作成直後は`postgres`、`template0`、`template1`の3つのデータベースが存在しています。psqlを終了するには`\q`を入力した後に何かキーをタッチします。

# Stack Builderによる追加ソフトのインストール

Stack Builderは追加ソフトをインストールするユーティリティで、必要な追加ソフトがあれば、これでインストールできます。起動は[スタートメニュー](#スタートメニューのpostgresqlフォルダ)から行います。

![setup-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/67d96434-28bb-4c68-be1b-0b99dfc11a79.png)

まず、どのPostgreSQLサーバに対してインストールするかを選択します。

![setup-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160683/408eeba8-3572-415e-aca4-289637b30520.png)

次に、インストールする追加ソフトを選択します。PostgreSQL 17に対して選択できる追加ソフトは以下のとおりです。

* :file_folder: アドオン、ツールおよびユーティリティ
    * :package: **pgAgent** - ジョブを定期実行するジョブスケジューラ
    * :package: **pgBouncer** - 接続を再利用して負荷を減らすコネクションプーラ
* :file_folder: データベースドライバ
    * :package: **Npgsql** - C#など.NETアプリから接続するためのデータプロバイダ
    * :package: **pgJDBC** - Javaアプリから接続するためのドライバ
    * :package: **psqlODBC** - ExcelなどODBC対応アプリから接続するためのドライバ
* :file_folder: データベースサーバ
    * :package: **PostgreSQL** - 別バージョンのPostgreSQLサーバ
* :file_folder: 要登録および試用製品
    * :file_folder: EDB社ツール
        * :package: **Migration Toolkit** - Oracleなどからスキーマやデータ移行を行うマイグレーションツール
        * :package: **Postgres Enterprise Manager Agent** - 対象サーバでタスク実行や情報収集を行うPEM用エージェント
        * :package: **Postgres Enterprise Manager Server** - エンタープライズ向けGUI管理ツールPostgres Enterprise Manager (PEM) のサーバ部分
        * :package: **Replication Server** - Oracleなどともデータ同期可能なレプリケーションツール
        * :package: **SQL Profiler Plugin** - 遅いSQLを分析するためのPEM用プラグイン
* :file_folder: 地理拡張
    * :package: **PostGIS** - 地理空間データを扱うための拡張モジュール
* :file_folder: Web開発
    * :package: **PEM-HTTPD** - PEM用Webサーバ (単体では使わない)

「次へ」をクリックしていくと、選択した追加ソフトがダウンロードされ、その後、Skip Installationのチェックを外さず、「次へ」をクリックすると、インストーラが起動します。あとはインストーラの指示に従ってください。

# 終わりに

PostgreSQLをWindowsにインストールする手順について説明しました。ローカルホスト以外から接続するには、さらに設定を行う必要があります。それについてはLinux向けの記事ですが、[こちら](https://qiita.com/tom-sato/items/d5f722fd02ed76db5440)の記事を参考にしてください。