【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
  1. ベースイメージ: 公式のPostgreSQL 18イメージを使用
  2. 日本語ロケールのインストール: 日本語ロケールを使うためにlocalesパッケージをインストール。localedefコマンドでja_JP.UTF-8ロケールを生成
  3. 環境変数の設定: 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 mydb

PostgreSQLのコマンドラインに入れたら、ロケールが正しく設定されているか確認してみます。次のコマンドを実行してください。

-- データベースのロケール設定を確認
SELECT datname, datcollate, datctype, datlocprovider 
FROM pg_database 
WHERE datname = 'mydb';

datcollatedatctypeja_JP.UTF-8になっていれば完璧です!

テーブルの確認

\dt
SELECT * FROM users;

日本語のデータがちゃんと表示されていれば成功です。

pgAdminで快適GUI管理

コマンドラインも便利ですが、pgAdminをインストールすると利便性がグッと上がります。

pgAdminのインストール

公式サイトからダウンロードできます:
https://www.pgadmin.org/download/

WindowsやMac、Linuxそれぞれに対応したインストーラーがあるので、お使いのOSに合わせてダウンロードしてください。

pgAdminでの接続設定

  1. pgAdminを起動したら、左のツリービューで「Servers」を右クリック
  2. 「Register」→「Server…」を選択
  3. 「General」タブで適当な名前を入力(例:「Local PostgreSQL 18」)
  4. 「Connection」タブで以下を設定:
    • Host name/address: localhost
    • Port: 5432
    • Maintenance database: mydb
    • Username: postgres
    • Password: postgres
    • 「Save password?」を有効にすると便利です
  5. 「Save」をクリック

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

pgAdminでデータを確認

データを見たい場合は、次のような操作を行ってください。

  1. 左のツリーで「Servers」→「Local PostgreSQL 18」→「Databases」→「mydb」→「Schemas」→「public」→「Tables」と展開
  2. 「users」テーブルを右クリック→「View/Edit Data」→「All Rows」を選択

クエリを実行したい場合は、上部のツールバーから「Query Tool」アイコンをクリックすれば、SQLエディタが開きます。

まとめ

Dockerを使って、PostgreSQL18に日本語ロケールを設定して、初期データまで投入した状態で起動する事まで実現しました

これでローカル環境に影響しない独立したPostgreSQL環境が手に入りました。

ここまで読んで頂きありがとうございました。またお会いしましょう!


--------------------------
開発支援・技術研修のご要望・ご相談はこちらから
--------------------------
【この技術ブログを読んだエンジニアの皆様へ】
カサレアルブログをお読みいただき、ありがとうございます!

私たちは、常に新しい技術に挑戦し、ユーザーのニーズに応えるサービスを提供しています。
もし、当社の技術への情熱や、会社・チーム・社員の雰囲気に共感いただけたなら、
ぜひ私たちと一緒に働きませんか?
現在、株式会社カサレアルでは事業拡大に伴い、新たな仲間となるエンジニアを積極的に募集しています。

少しでも興味をお持ちいただけましたら、まずは弊社のことを知っていただけると嬉しいです。
▼採用サイト
https://www.casareal.co.jp/recruit/career
▼社員インタビュー
https://hrmos.co/pages/casareal/jobs/0000016
▼エンジニアの仲間になる! エントリーはこちらから
https://hrmos.co/pages/casareal/jobs

皆様のエントリーを心よりお待ちしています!

SwitchBotを使ってみた
アジャイルの基本に立ち返ろう! Scrum Sunrise 2025から見えてきたアジャイルの4つの「今」

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメント ※

名前 ※

メール ※

サイト