PostgreSQL 17の導入と初期設定

1. PostgreSQLのインストール

  1. Explorerを使ってインストーラ(postgresql-17.○-○-windows-x64.exe)を起動します。
  2. セキュリティ警告(ユーザーアカウント制御)が出たら、[はい]をクリックして許可します。

ユーザーアカウント制御

  1. Welcome to the PostgreSQL Setup Wizard画面が表示されたら、[Next]をクリックします。

PostgreSQLセットアップウィザード

  1. インストールディレクトリはデフォルトのまま、[Next]をクリックします。

インストールディレクトリ

  1. コンポーネントを次のように選択します。

    • PostgreSQL ServerpgAdmin 4Command Line Toolsは、チェックを付けたままにします。
    • Stack Builderは研修で使わないため、チェックを外します(インストールしません)。

    Command Line Toolsには、ターミナルでPostgreSQLを操作するためのpsqlが含まれます。本書ではpsqlを使用するため、必ず選択します。

Stack Builderの選択

  1. Data Directory(データベースの格納場所)もデフォルトのまま、[Next]をクリックします。

Data Directoryの選択

  1. パスワードを設定します。

本書では便宜上、jdbcを設定します。この値は、外部から接続できない研修用PCだけで使用する、演習専用のパスワードです。

【注意】学習用パスワードjdbcを使うリスク

postgresは、データベースの作成・削除やユーザーの権限変更などを行える、PostgreSQLの管理者ユーザーです。接続できる経路を持つ第三者にパスワードjdbcを知られると、その第三者がpostgresとしてデータベースを操作できるおそれがあります。

また、PostgreSQLサービスを実行するWindowsアカウントは、インストール時の設定により異なります。これはデータベースの管理者ユーザーpostgresとは別のものです。単純なパスワードを、本番環境・社内共有PC・ネットワークに接続する環境で使ったり、ほかのサービスで使い回したりしてはいけません。

実務では、推測されにくい十分な長さのパスワードを個別に設定し、アプリケーション用には必要な権限だけを持つ専用ユーザーを作成します。

パスワードを正確に2回入力したら、[Next]をクリックします。

パスワードの設定

  1. PostgreSQLが使用するポート番号を54320に変更して、[Next]をクリックします。

ポート番号の設定

【補足】ポート番号54320を使用する理由

PostgreSQLのデフォルトのポート番号は5432ですが、既存のPostgreSQLとポート番号が重なる可能性を下げるため、本書では54320を使用することとします。
以降のpsqlやJavaプログラムでも、同じポート番号を指定します。

  1. ロケールをクリックして、Cを選択します。

ロケールの設定

【補足】本書でCロケールを選ぶ理由

本書では、学習環境による文字列の並び順の差を減らし、演習結果を揃えやすくするため、Cロケールを選択します。

Cロケールでは、日本語の文字列は五十音順や辞書順には並びません。
日本語として自然な並び順が必要な業務システムでは、要件に応じて日本語ロケールやICU照合順序を検討します。

  1. これまでの選択を確認する画面が表示されたら、[Next]をクリックします。

インストール内容の確認

  1. インストールの準備が整ったことを知らせる画面が表示されたら、[Next]をクリックします。

インストール準備完了

  1. インストール完了まで数分待ちます。

インストールの進行状況

  1. [Finish]をクリックして終了します。

インストール完了

2. 追加の設定

2.1. psqlを使えるようにする

PostgreSQLの操作にはpsqlを使用します。本書では、PowerShell 7などのターミナルからpsqlを起動します。

PostgreSQLインストーラーはpsqlの場所を環境変数Pathへ自動では追加しないため、次の設定を手動で行います。

  1. スタートメニューを開きます。

  2. スタートメニューの上部検索エリアに「環境変数」と入力し、検索を実行します。

  3. [システム環境変数を編集]を選択します。

  4. 開いた画面で[環境変数]をクリックします。

  5. 画面上部の「ユーザー環境変数」から、変数Pathをダブルクリックします。

  6. [新規]をクリックし、次のパス(psql.exeがあるフォルダー)を追加します。

    C:\Program Files\PostgreSQL\17\bin
    

    **【注意】**PostgreSQLのインストール先を変更した場合は、そのインストールフォルダーの末尾に\binを付けたパスを追加してください。

  7. [OK]をクリックして、これまで開いてきたすべての設定画面を閉じます。

  8. 開いているターミナルをすべて閉じ、新しくPowerShell 7を開きます。次のコマンドを実行して、psqlが見つかることとバージョンを確認します。

    Get-Command psql
    psql --version
    
    CommandType     Name                                  Version
    -----------     ----                                  ----
    Application     psql.exe                              17.…
    
    psql (PostgreSQL) 17.x
    

    【補足】システム環境変数のPathへ追加するケース

    複数のWindowsユーザーがpsqlを使用する場合は、下側の「システム環境変数」のPathへ追加します。この操作には管理者権限が必要です。

    【補足】Pathを変更できない場合

    どうしてもPathを変更できないPCの場合は、psql.exeの絶対パスを指定して実行することも可能です。PowerShellでは、パスに空白が含まれるため、先頭に&を付けます。

    # PowerShellで絶対パス指定する例
     & 'C:\Program Files\PostgreSQL\17\bin\psql.exe' -U postgres -p 54320
    

    ただし、この場合は以降のpsqlコマンドも絶対パスを付けて実行することになります。

本書の学習環境(PowerShell 7、PostgreSQL、Eclipse)で使う文字コードはUTF-8で統一します。
PowerShell 7でpsqlを使用するときのコンソールコードページをUTF-8にするため、プロファイルに設定を書き込みます。

次の節では、コンソールコードページをUTF-8に設定し、psqlのクライアント文字コードがUTF8であることを確認します。

2.2. $PROFILEのパスを確認する

PowerShellで次のコマンドを実行します。

$PROFILE

出力例:

C:\Users\(ユーザー名)\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

$PROFILEは、PowerShell 7用プロファイルの保存先を表す自動変数です。ファイルがまだ存在しない場合でも、この保存先のパスが表示されます。ここにファイルを作成すると、PowerShell 7の起動時に自動実行されます。

2.3. プロファイルのフォルダーとファイルを作成する

次のコマンドを実行します。

2.4. $PROFILEを編集する

次のコマンドを実行します。

notepad $PROFILE

メモ帳が開くので、末尾に次の内容を追加します。

保存して閉じます。

2.5. PowerShell 7を再起動する

  1. PowerShell 7を終了します。
  2. もう一度PowerShell 7を起動します。

2.6. 設定が有効になったことを確認する

PowerShell 7で次を実行します。

chcp

期待される結果は次のとおりです。

chcp
現在のコード ページ: 65001

chcpのメッセージはWindowsの表示言語によって変わります。出力に65001が含まていればOKです。

2.7. 設定の確認(文字コード指定の確認)

psqlを起動して、サーバー側(PostgreSQL)とpsql接続側(PowerShell)の文字コード指定が、共にUTF8であることを確認します。

psql -U postgres -p 54320

psqlのパスワード入力

PostgreSQLの起動成功

【補足】
今回の設定では、psql 起動時にコードページに関する WARNING が表示されることがあります。
これはコンソール(PowerShell 7)のコードページ(65001)とWindows のシステムコードページ(932)が一致していないことによるものです。この WARNING は設定間違いを示すものではありません。

SHOW server_encoding;
SHOW client_encoding;

期待される結果は次のとおりです。

server_encoding -> UTF8
client_encoding -> UTF8

サーバー文字コードの確認

server_encoding、client_encodingの両方ともUTF8であれば正しく設定できています。

3. 学習用データベース(rakuraku)のセットアップ

本書の実習用データベースをセットアップします。学習を進める上で必須です。必ずセットアップしてください。

以下、前節2.7.の手順で、すでにpsqlが起動していることを前提に説明します。

 id | entry_date | cat_id | cat_name |     note     | income | expense
----+------------+--------+----------+--------------+--------+---------
  1 | 2026-03-03 |      2 | 配当金   | 株の配当金   |  30000 |       0
  2 | 2026-03-03 |      4 | 食費     | 米5キロ     |      0 |    4500
  3 | 2026-03-25 |      1 | 給与     | 3月給料     | 280000 |       0
  6 | 2026-04-05 |      4 | 食費     | 酒代         |      0 |    7000
  4 | 2026-04-11 |      3 | 雑収入   | 宝くじ当選金 |   1000 |       0
  5 | 2026-04-14 |      5 | 住居費   | 町内会費     |      0 |    5000
  7 | 2026-04-25 |      1 | 給与     | 4月給料     | 280000 |       0
  8 | 2026-05-01 |      6 | 教育費   | セミナー費   |      0 |    6000
  9 | 2026-05-06 |      4 | 食費     | 缶詰         |      0 |    3800
 10 | 2026-05-10 |      7 | 医療費   | 皮膚科受診   |      0 |    2000
 11 | 2026-05-25 |      1 | 給与     | 5月給料     | 280000 |       0
 12 | 2026-06-18 |      8 | 雑費     | 車補修       |      0 |   30000
 13 | 2026-06-19 |      4 | 食費     | 冷凍食品     |      0 |    8000
 15 | 2026-06-25 |      1 | 給与     | 6月給料     | 280000 |       0
 16 | 2026-06-25 |      1 | 給与     | ボーナス     | 900000 |       0
 14 | 2026-07-20 |      6 | 教育費   | 塾代         |      0 |   25000
 17 | 2026-07-20 |      7 | 医療費   | 餞別         |      0 |   10000
(17 rows)

【注意】このスクリプトを実行すると、rakurakuデータベースと、その中のデータはすべて削除されます。
実行前には、rakurakuへ接続しているpsql、pgAdmin、Javaプログラムを終了してください。

4. その他の操作

手順通りに進めればPostgreSQLやpsqlの設定は以上で完了です。
以下は、状況により必要になる操作についての解説です。必要に応じて参照してください。

4.1. PowerShellのバージョン確認方法

本書ではシェルとしてPowerShell 7を使用することを前提にしています。
以下は、シェルがPowerShell 7であることを確認する手順です。
念のため、本書で学習を進める前に、お使いのPowerShellのバージョンを確認しておくことをお勧めします。

  1. スタートを右クリックし、[ターミナル]を選択してPowerShell 7を開きます。
  2. 次のコマンドでPowerShellのバージョンを確認します。
$PSVersionTable
実行例

Name                           Value
----                           -----
PSVersion                      7.6.3
PSEdition                      Core
GitCommitId                    7.6.3
OS                             Microsoft Windows 10.0.26200
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.4
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

確認のポイントは、PSEditionCoreであり、PSVersion7.xであることです。

【補足】古いPowerShellが起動している場合
互換性維持のための古いPowerShell 5系統が起動することがあります。
その場合は、ターミナルのタブ見出し(プラスボタン)の右側にあるをクリックし、アイコン背景が黒地のPowerShellを選択してください。

4.2. psqlの起動時オプション

本書で使用するデータベース名はrakurakuで、ポート番号は54320を使います。
ご利用環境の都合で、データベース名やポート番号を変えた場合には、以下を参考にしてPostgreSQLデータベースにログインしてください。

オプション 説明
-h 接続先のコンピュータ名(ホスト名)を指定する
-U ユーザーを指定する
-d データベース名を指定する
-p ポート番号を指定する

ユーザーpostgresmydbに接続する例です。接続ポートはデフォルトの5432なので省略できます。

psql -U postgres -d mydb

デフォルト以外のポート番号を指定して、ユーザーpostgresmydbに接続する例です。
ポート番号をデフォルトから変更する場合は、-pオプションに続けてポート番号を明記する必要があります。

psql -p 54320 -U postgres -d mydb

接続先のコンピュータ名(ホスト名)を指定する例です。
Windowsではホスト指定を省略するとlocalhostが使われます。

psql -h localhost -p 54320 -U postgres -d mydb

4.3. PostgreSQLサービスの再起動

設定を確実にPostgreSQLに反映するため、postgresql.confなどの設定ファイルを修正した場合は、PostgreSQLサービスを再起動します。以下にその手順を示します。

4.3.1. ターミナルを管理者モードで開く

PowerShell7(管理者モード)を探す

4.3.2. PostgreSQLのサービス名を調べる

開いたPowerShell(管理者モード)で以下のコマンドを実行します。

Get-Service *postgres*
出力例
Status   Name               DisplayName
------   ----               -----------
Running  postgresql-x64-17  postgresql-x64-17

上例の場合、Name列に表示されたサービス名が、PostgreSQLのサービス名です。
postgresql-x64-17はインストールしたPostgreSQLのバージョンにより変わります。
実際にName列に表示されたサービス名を以下の操作では使ってください。

【補足】コマンドプロンプトの場合
開いたターミナルがコマンドプロンプトだった場合には、次のコマンドでも確認できます。

sc.exe query type= service state= all | findstr /I "postgresql"
# 出力例
SERVICE_NAME: postgresql-x64-17
DISPLAY_NAME: postgresql-x64-17

【注意】サービス名を変更している場合

サービス名を任意に変更している場合など、上のコマンドで見つからないときは、スタートメニューで「サービス」を検索して開きます。
PostgreSQLのサービスを右クリックして[プロパティ]を開き、表示されたサービス名を確認します。

4.3.3. PostgreSQLサービスの再起動

サービス名がpostgresql-x64-17と表示された場合は、次のコマンドでサービスを停止し、再度起動します。

【注意】サービスを停止すると、接続中のpsqlやJavaプログラムも切断されます。必ず、これらのプログラムを終了してから実行してください。

net stop postgresql-x64-17
net start postgresql-x64-17

PostgreSQLサービスの再起動