
【2025年度最新】PostgreSQL18をDocker使って日本語対応でインストール
PostgreSQLを自分のマシンに直接インストールすると、バージョンアップや壊れた時の再インストールなどの余計な管理コストが発生します。そこでDockerを使ってコンテナとしてインストールするのは今となっては定番な方法かと思います。
今回は、Dockerを使ってPosgreSQLの準備を行う方法を解説します。実施したい要件は次の通りです。
- バージョン: PostgreSQL 18(2025年最新版)
- ロケール: 日本語
- 初期状態: SQLファイルに用意したデータベースとテーブルを投入済み
準備するファイル構成
まずはプロジェクトのディレクトリ構成を確認しておきましょう。こんな感じで準備してください。
docker-postgres/
├── Dockerfile
├── compose.yaml
└── init/
└── init.sql“init.sql”には、データベースやテーブルの初期設定用のSQLを用意します。内容は後述します。
Dockerfileを書く
それでは、PostgreSQL 18に日本語ロケールを設定した”Dockerfile”を作成しましょう。以下のように記述してください。
FROM postgres:18 # 1.ベースイメージ
# 2. 日本語ロケールのインストールと設定
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
# 3. 環境変数の設定
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8- ベースイメージ: 公式のPostgreSQL 18イメージを使用
- 日本語ロケールのインストール: 日本語ロケールを使うためにlocalesパッケージをインストール。localedefコマンドでja_JP.UTF-8ロケールを生成
- 環境変数の設定: PostgreSQLが日本語ロケールを認識するように設定
rm -rf /var/lib/apt/lists/*は、apt-getのキャッシュを削除し、Dockerのイメージサイズが肥大化しないようにしています。
compose.yamlを書く
次は、Docker Composeの設定ファイルです。さっき作った”Dockerfile”を読み込み、”init”フォルダ内のSQLも適用します。
services:
postgres:
build:
context: .
dockerfile: Dockerfile
container_name: postgres_container
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: mydb
POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
ports:
- "5432:5432"
volumes:
- db_vol:/var/lib/postgres18data
- ./init:/docker-entrypoint-initdb.d
restart: unless-stopped
volumes:
db_vol:- POSTGRES_USER: 初期ユーザー
- POSTGRES_PASSWORD: パスワード
- POSTGRES_DB: データベース名を設定
- POSTGRES_INITDB_ARGS: データベース初期化時の引数。ここでは文字コードを指定
- db_vol: データベースの保存場所
- ./init:/docker-entrypoint-initdb.d: コンテナ内の初期化用SQLファイルを配置する場所
- 5432:5432: ホスト側の5432ポートをコンテナ側の5432ポートにマッピング
DB初期設定のためのSQLファイルを書く
“init/init.sql”に、DBテーブルの初期設定を書きます。内容は下記の通りです。
-- サンプルテーブルの作成
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- サンプルデータの挿入
INSERT INTO users (name, email) VALUES
('山田太郎', 'yamada@example.com'),
('佐藤花子', 'sato@example.com'),
('鈴木一郎', 'suzuki@example.com');
-- インデックスの作成
CREATE INDEX idx_users_email ON users(email);挿入するデータは、日本語の文字が取り扱えるかをチェックする内容になっています。
compose upで起動
準備が整ったら、早速起動してみましょう!
docker compose up -d-dオプションを付けると、バックグラウンドで起動します。初回はDockerイメージのビルドが走るので、少し時間がかかるかもしれません。
起動したら、ログを確認してみます
docker compose logs postgres「database system is ready to accept connections」というメッセージが出ていればOKです!
PostgreSQLに接続する
docker compose exec postgres psql -U postgres -d mydbPostgreSQLのコマンドラインに入れたら、ロケールが正しく設定されているか確認してみます。次のコマンドを実行してください。
-- データベースのロケール設定を確認
SELECT datname, datcollate, datctype, datlocprovider
FROM pg_database
WHERE datname = 'mydb';datcollateとdatctypeがja_JP.UTF-8になっていれば完璧です!
テーブルの確認
\dt
SELECT * FROM users;日本語のデータがちゃんと表示されていれば成功です。
pgAdminで快適GUI管理
コマンドラインも便利ですが、pgAdminをインストールすると利便性がグッと上がります。
pgAdminのインストール
公式サイトからダウンロードできます:
https://www.pgadmin.org/download/
WindowsやMac、Linuxそれぞれに対応したインストーラーがあるので、お使いのOSに合わせてダウンロードしてください。
pgAdminでの接続設定
- pgAdminを起動したら、左のツリービューで「Servers」を右クリック
- 「Register」→「Server…」を選択
- 「General」タブで適当な名前を入力(例:「Local PostgreSQL 18」)
- 「Connection」タブで以下を設定:
- Host name/address:
localhost - Port:
5432 - Maintenance database:
mydb - Username:
postgres - Password:
postgres - 「Save password?」を有効にすると便利です
- Host name/address:
- 「Save」をクリック

接続できたら、左のツリーから”Databases”を展開して、テーブルやデータを確認できます。

pgAdminでデータを確認
データを見たい場合は、次のような操作を行ってください。
- 左のツリーで「Servers」→「Local PostgreSQL 18」→「Databases」→「mydb」→「Schemas」→「public」→「Tables」と展開
- 「users」テーブルを右クリック→「View/Edit Data」→「All Rows」を選択

クエリを実行したい場合は、上部のツールバーから「Query Tool」アイコンをクリックすれば、SQLエディタが開きます。
まとめ
Dockerを使って、PostgreSQL18に日本語ロケールを設定して、初期データまで投入した状態で起動する事まで実現しました
これでローカル環境に影響しない独立したPostgreSQL環境が手に入りました。
ここまで読んで頂きありがとうございました。またお会いしましょう!