PostgreSQL インストールと初期設定ガイド
このドキュメントでは、PostgreSQLのインストールから本番環境向けの初期設定までを解説します。
目次
1. インストール方法
1.1 インストール方法の比較
┌──────────────────────────────────────────────────────────────┐
│ インストール方法の選択 │
├──────────────────────────────────────────────────────────────┤
│ │
│ ① パッケージマネージャー (推奨) │
│ - OS標準またはPGDGリポジトリ │
│ - 自動更新、依存関係管理が容易 │
│ - 本番環境向け │
│ │
│ ② ソースからビルド │
│ - 最新バージョン、カスタムビルド │
│ - 開発・検証環境向け │
│ │
│ ③ Docker │
│ - 環境の再現性 │
│ - 開発・CI/CD向け │
│ │
│ ④ クラウドマネージドサービス │
│ - RDS, Cloud SQL, Azure Database等 │
│ - 運用負荷軽減 │
│ │
└──────────────────────────────────────────────────────────────┘
1.2 Linux (RHEL/CentOS/Rocky Linux)
# PGDG (PostgreSQL Global Development Group) リポジトリの追加
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# デフォルトのPostgreSQLモジュールを無効化
sudo dnf -qy module disable postgresql
# PostgreSQL 16 のインストール
sudo dnf install -y postgresql16-server postgresql16-contrib
# バージョン確認
/usr/pgsql-16/bin/postgres --version
1.3 Linux (Ubuntu/Debian)
# PGDGリポジトリの追加
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# リポジトリの署名キーをインポート
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# パッケージリストの更新
sudo apt-get update
# PostgreSQL 16 のインストール
sudo apt-get install -y postgresql-16 postgresql-contrib-16
# バージョン確認
psql --version
1.4 macOS
# Homebrewでインストール
brew install postgresql@16
# パスを通す
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# サービスの開始
brew services start postgresql@16
1.5 Docker
# 基本的な起動
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:16
# カスタム設定付き
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=myuser \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
-v ./postgresql.conf:/etc/postgresql/postgresql.conf \
postgres:16 -c 'config_file=/etc/postgresql/postgresql.conf'
2. データベースクラスタの初期化
2.1 initdb の実行
# RHEL系の場合
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
# または手動で実行
sudo -u postgres /usr/pgsql-16/bin/initdb -D /var/lib/pgsql/16/data
# Ubuntu/Debianの場合(自動で実行される)
# 手動で行う場合
sudo -u postgres /usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main
2.2 initdb のオプション
┌──────────────────────────────────────────────────────────────┐
│ initdb の主要オプション │
├──────────────────────────────────────────────────────────────┤
│ │
│ -D, --pgdata=DIRECTORY │
│ データディ レクトリを指定 │
│ │
│ -E, --encoding=ENCODING │
│ デフォルトのエンコーディング (推奨: UTF8) │
│ │
│ --locale=LOCALE │
│ ロケール設定 (推奨: C.UTF-8 または en_US.UTF-8) │
│ │
│ --lc-collate=LOCALE │
│ 照合順序のロケール │
│ │
│ --data-checksums │
│ データページのチェックサムを有効化 (推奨) │
│ │
│ -k, --data-encryption │
│ TDE (Transparent Data Encryption) - PostgreSQL 16+ │
│ │
│ --wal-segsize=SIZE │
│ WALセグメントサイズ (デフォルト: 16MB) │
│ │
└──────────────────────────────────────────────────────────────┘
2.3 本番環境向け initdb 例
sudo -u postgres /usr/pgsql-16/bin/initdb \
-D /var/lib/pgsql/16/data \
-E UTF8 \
--locale=C.UTF-8 \
--data-checksums \
--wal-segsize=64
2.4 データディレクトリの構造
/var/lib/pgsql/16/data/
├── base/ # データベースファイル
│ ├── 1/ # template1
│ ├── 4/ # template0
│ └── 5/ # postgres
├── global/ # クラスタ全体の共有テーブル
├── pg_commit_ts/ # トランザクションコミットタイムスタンプ
├── pg_dynshmem/ # 動的共有メモリ
├── pg_logical/ # 論理レプリケーション
├── pg_multixact/ # マルチトランザクション
├── pg_notify/ # LISTEN/NOTIFY
├── pg_replslot/ # レプリケーションスロット
├── pg_serial/ # シリアライザブルトランザクション
├── pg_snapshots/ # エクスポートされたスナップショット
├── pg_stat/ # 統計情報(永続)
├── pg_stat_tmp/ # 統計情報(一時)
├── pg_subtrans/ # サブトランザクション
├── pg_tblspc/ # テーブルスペースへのシンボリックリンク
├── pg_twophase/ # 2フェーズコミット
├── pg_wal/ # WALファイル
├── pg_xact/ # トランザクションコミット状態
├── postgresql.auto.conf # ALTER SYSTEMによる設定
├── postgresql.conf # メイン設定ファイル
├── pg_hba.conf # クライアント認証設定
├── pg_ident.conf # ユーザーマッピング
├── PG_VERSION # PostgreSQLバージョン
├── postmaster.opts # 最後の起動オプション
└── postmaster.pid # プロセスID(起動中のみ)