PostgreSQLをLinuxでダウンロードしてインストールする方法を初心者向けに詳しく解説します。
各Linuxディストリビューション別の手順から、基本設定まで包括的にご紹介します。
PostgreSQLとは?

PostgreSQLの特徴
PostgreSQLは、世界で最も高機能なオープンソースデータベース管理システムの一つです。
主な特徴
- 完全なSQL準拠と高い標準適合性
- 豊富なデータ型(JSON、配列、地理情報など)
- 強力な拡張機能(プラグイン対応)
- 企業レベルの信頼性とパフォーマンス
- 無料で商用利用可能
PostgreSQLが選ばれる理由
- 複雑なクエリと高度な機能が必要な場合
- データの整合性を重視するシステム
- 地理情報システム(GIS)での利用
- ビッグデータや分析用途
- Webアプリケーションのバックエンド
他のデータベースとの比較
項目 | PostgreSQL | MySQL | SQLite |
---|---|---|---|
用途 | 複雑なシステム | Web アプリ | 軽量アプリ |
SQL準拠 | 高い | 中程度 | 基本的 |
機能の豊富さ | ★★★ | ★★☆ | ★☆☆ |
学習コスト | 高 | 中 | 低 |
パフォーマンス | 高(複雑クエリ) | 高(単純クエリ) | 高(小規模) |
インストール方法の選択肢
推奨される方法:パッケージ管理ツール
メリット
- 簡単で確実なインストール
- 自動的な依存関係の解決
- セキュリティアップデートの自動適用
- ディストリビューション固有の最適化
対応ディストリビューション
- Ubuntu / Debian系(apt)
- CentOS / RHEL / AlmaLinux / Rocky Linux(dnf/yum)
- openSUSE(zypper)
- Arch Linux(pacman)
代替方法:ソースコードからビルド
こんな場合に検討
- 特殊なハードウェア環境(Power Systems等)
- カスタムコンパイルオプションが必要
- 最新の開発版を使用したい
- 学習目的でビルドプロセスを理解したい
注意点
- 時間と技術的知識が必要
- 依存関係の手動管理
- セキュリティアップデートの手動適用
Ubuntu / Debian でのインストール

事前準備とシステム更新
システムの更新
# パッケージリストの更新
sudo apt update
# システム全体の更新
sudo apt upgrade -y
# 必要なツールのインストール
sudo apt install -y wget gnupg2 lsb-release
公式リポジトリの追加
PostgreSQL公式APTリポジトリの追加
# GPGキーのインポート
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg
# リポジトリの追加
echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
# パッケージリストの更新
sudo apt update
リポジトリ追加の確認
# 利用可能なPostgreSQLバージョンの確認
apt list --upgradable | grep postgresql
# リポジトリの確認
apt policy postgresql
PostgreSQLのインストール
基本インストール
# PostgreSQLサーバーとクライアントのインストール
sudo apt install -y postgresql postgresql-contrib
# 追加ツールのインストール(オプション)
sudo apt install -y postgresql-client postgresql-doc
特定バージョンのインストール
# 利用可能なバージョンの確認
apt search postgresql-
# 特定バージョンの指定インストール
sudo apt install -y postgresql-15 postgresql-contrib-15
サービスの設定と起動
サービス管理
# PostgreSQLサービスの起動
sudo systemctl start postgresql
# 自動起動の有効化
sudo systemctl enable postgresql
# 起動と有効化を同時実行
sudo systemctl enable --now postgresql
# サービス状態の確認
sudo systemctl status postgresql
正常起動時の表示例
$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2024-01-15 10:00:00 JST; 5min ago
Process: 1234 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1234 (code=exited, status=0/SUCCESS)
初期設定とアクセス確認
postgresユーザーでの接続
# postgresユーザーに切り替え
sudo -i -u postgres
# psqlクライアントでデータベースに接続
psql
# PostgreSQLプロンプトでバージョン確認
SELECT version();
# 終了
\q
exit
パスワード設定
-- postgresユーザーのパスワード設定
ALTER USER postgres WITH PASSWORD 'your_secure_password';
-- 設定確認
\du
CentOS / RHEL / AlmaLinux / Rocky Linux でのインストール

システム準備
システム更新と必要ツールのインストール
# システム全体の更新
sudo dnf update -y
# 必要なツールのインストール
sudo dnf install -y wget curl
PostgreSQL公式リポジトリの追加
リポジトリのインストール
# PostgreSQL公式YUMリポジトリの追加
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# リポジトリの確認
sudo dnf repolist | grep pgdg
# 利用可能なPostgreSQLパッケージの確認
sudo dnf search postgresql
PostgreSQLのインストール
基本インストール
# PostgreSQLサーバーとクライアントのインストール
sudo dnf install -y postgresql15-server postgresql15-contrib
# 追加ツールのインストール
sudo dnf install -y postgresql15-docs postgresql15-devel
インストール確認
# インストールされたパッケージの確認
rpm -qa | grep postgresql
# PostgreSQLバージョンの確認
/usr/pgsql-15/bin/postgres --version
データベースの初期化
PostgreSQL特有の初期化手順
# データベースクラスターの初期化
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
# 初期化の確認
sudo ls -la /var/lib/pgsql/15/data/
初期化成功時の表示
$ sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
Initializing database ... OK
サービスの設定と起動
systemdサービスの管理
# PostgreSQLサービスの有効化と起動
sudo systemctl enable --now postgresql-15
# サービス状態の確認
sudo systemctl status postgresql-15
# プロセス確認
sudo ps aux | grep postgres
環境変数とパスの設定
PostgreSQLコマンドへのパス設定
# パスの追加(一時的)
export PATH=/usr/pgsql-15/bin:$PATH
# 永続的なパス設定
echo 'export PATH=/usr/pgsql-15/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 設定確認
which psql
psql --version
ソースコードからのインストール

必要なツールと依存関係のインストール
開発ツールのインストール
# Ubuntu/Debian の場合
sudo apt install -y build-essential zlib1g-dev libreadline-dev libssl-dev libxml2-dev libxslt1-dev
# CentOS/RHEL の場合
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel
ソースコードのダウンロードとビルド
ダウンロードと展開
# 作業ディレクトリの作成
mkdir -p ~/postgresql-build
cd ~/postgresql-build
# ソースコードのダウンロード
wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz
# 展開
tar -zxvf postgresql-15.5.tar.gz
cd postgresql-15.5
configure とビルド
# ビルド設定
./configure \
--prefix=/usr/local/pgsql \
--with-openssl \
--with-libxml \
--with-libxslt \
--enable-thread-safety
# ビルド実行
make -j$(nproc)
# テスト実行(オプション)
make check
# インストール
sudo make install
ユーザーとディレクトリの作成
postgresユーザーの作成
# postgresユーザーの作成
sudo useradd -r -s /bin/bash -d /usr/local/pgsql postgres
# ディレクトリの所有権設定
sudo chown -R postgres:postgres /usr/local/pgsql
# データディレクトリの作成
sudo mkdir -p /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/data
データベースの初期化とサービス設定
データベースクラスターの初期化
# postgresユーザーに切り替え
sudo -i -u postgres
# パス設定
export PATH=/usr/local/pgsql/bin:$PATH
# データベースの初期化
initdb -D /usr/local/pgsql/data
# PostgreSQLサーバーの起動
pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile start
systemdサービスの作成
# サービスファイルの作成
sudo tee /etc/systemd/system/postgresql-custom.service > /dev/null << 'EOF'
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
EOF
# サービスの有効化
sudo systemctl daemon-reload
sudo systemctl enable --now postgresql-custom
設定ファイルの編集

主要な設定ファイル
設定ファイルの場所
# パッケージインストールの場合(Ubuntu/Debian)
/etc/postgresql/15/main/postgresql.conf
/etc/postgresql/15/main/pg_hba.conf
# パッケージインストールの場合(CentOS/RHEL)
/var/lib/pgsql/15/data/postgresql.conf
/var/lib/pgsql/15/data/pg_hba.conf
# ソースインストールの場合
/usr/local/pgsql/data/postgresql.conf
/usr/local/pgsql/data/pg_hba.conf
postgresql.conf の基本設定
基本的な設定項目
# 設定ファイルのバックアップ
sudo cp /etc/postgresql/15/main/postgresql.conf /etc/postgresql/15/main/postgresql.conf.backup
# 設定ファイルの編集
sudo nano /etc/postgresql/15/main/postgresql.conf
重要な設定項目
# 接続設定
listen_addresses = 'localhost' # ローカル接続のみ
#listen_addresses = '*' # 全てのアドレスからの接続を許可
port = 5432 # 標準ポート
# メモリ設定
shared_buffers = 256MB # システムメモリの25%程度
effective_cache_size = 1GB # システムメモリの75%程度
work_mem = 4MB # ソート・ハッシュ操作用メモリ
# ログ設定
logging_collector = on # ログ収集を有効化
log_directory = 'log' # ログディレクトリ
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'none' # none, ddl, mod, all
# パフォーマンス設定
max_connections = 100 # 最大接続数
pg_hba.conf の認証設定
認証方法の設定
# 設定ファイルのバックアップ
sudo cp /etc/postgresql/15/main/pg_hba.conf /etc/postgresql/15/main/pg_hba.conf.backup
# 設定ファイルの編集
sudo nano /etc/postgresql/15/main/pg_hba.conf
基本的な認証設定例
# TYPE DATABASE USER ADDRESS METHOD
# ローカル接続
local all postgres peer
local all all md5
# IPv4ローカル接続
host all all 127.0.0.1/32 md5
# IPv6ローカル接続
host all all ::1/128 md5
# リモート接続(必要な場合のみ)
#host all all 192.168.1.0/24 md5
認証方法の説明
- peer:OSユーザー名での認証(ローカル接続のみ)
- md5:MD5ハッシュ化パスワード認証
- scram-sha-256:より安全なパスワード認証(推奨)
- trust:パスワードなし認証(開発環境のみ)
設定変更の反映
設定の再読み込み
# 設定の再読み込み(軽微な変更)
sudo systemctl reload postgresql
# サービスの再起動(重要な変更)
sudo systemctl restart postgresql
# 設定の確認
sudo -u postgres psql -c "SHOW config_file;"
sudo -u postgres psql -c "SHOW hba_file;"
リモート接続の設定

ファイアウォールの設定
ufw(Ubuntu/Debian)での設定
# PostgreSQLポートの開放
sudo ufw allow 5432/tcp
# 特定IPアドレスからのみ接続許可
sudo ufw allow from 192.168.1.100 to any port 5432
# 設定確認
sudo ufw status
firewalld(CentOS/RHEL)での設定
# PostgreSQLサービスの追加
sudo firewall-cmd --permanent --add-service=postgresql
# または、ポート番号で直接指定
sudo firewall-cmd --permanent --add-port=5432/tcp
# 特定IPアドレスからのみ接続許可
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="5432" accept'
# 設定の反映
sudo firewall-cmd --reload
# 設定確認
sudo firewall-cmd --list-all
リモート接続テスト
接続テストの実行
# 同一ネットワーク内の他のマシンから
psql -h 192.168.1.10 -U postgres -d postgres
# 接続情報の表示
\conninfo
# データベース一覧の確認
\l
# 接続終了
\q
データベースとユーザーの作成

基本的なデータベース操作
新しいデータベースの作成
-- PostgreSQLに接続
sudo -u postgres psql
-- 新しいデータベースの作成
CREATE DATABASE myapp_db
WITH ENCODING='UTF8'
LC_COLLATE='ja_JP.UTF-8'
LC_CTYPE='ja_JP.UTF-8';
-- データベース一覧の確認
\l
-- データベースへの接続
\c myapp_db
-- データベース情報の表示
\dt
ユーザーの作成と権限管理
アプリケーション用ユーザーの作成
-- 新しいユーザーの作成
CREATE USER myapp_user WITH PASSWORD 'secure_password_123!';
-- データベースの所有権付与
ALTER DATABASE myapp_db OWNER TO myapp_user;
-- スキーマの権限付与
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
-- 読み取り専用ユーザーの作成
CREATE USER readonly_user WITH PASSWORD 'readonly_pass_456!';
GRANT CONNECT ON DATABASE myapp_db TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
-- ユーザー一覧の確認
\du
-- 権限の確認
\dp
セキュリティ強化
パスワードポリシーの設定
-- パスワード暗号化方式の設定
ALTER SYSTEM SET password_encryption = 'scram-sha-256';
-- 設定の反映
SELECT pg_reload_conf();
-- 既存ユーザーのパスワード再設定
ALTER USER postgres WITH PASSWORD 'new_secure_password';
トラブルシューティング
よくある問題と対処法
問題1:PostgreSQLサービスが起動しない
# 詳細なエラー情報を確認
sudo journalctl -u postgresql -f
# PostgreSQLログの確認
sudo tail -f /var/log/postgresql/postgresql-15-main.log
# 設定ファイルの構文チェック
sudo -u postgres /usr/lib/postgresql/15/bin/postgres --config-file=/etc/postgresql/15/main/postgresql.conf --check-config
問題2:接続が拒否される
# ポートの確認
sudo ss -tlnp | grep 5432
# プロセスの確認
sudo ps aux | grep postgres
# 認証設定の確認
sudo -u postgres psql -c "SHOW hba_file;"
問題3:権限エラー
-- 現在のユーザーと権限を確認
SELECT current_user, session_user;
-- データベースの権限確認
\l
-- テーブルの権限確認
\dp table_name
-- 権限の再付与
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;
ログの確認方法
ログファイルの場所
# Ubuntu/Debian
/var/log/postgresql/postgresql-15-main.log
# CentOS/RHEL
/var/lib/pgsql/15/data/log/
# ログのリアルタイム監視
sudo tail -f /var/log/postgresql/postgresql-15-main.log
よくあるエラーメッセージ
FATAL: role "username" does not exist
→ ユーザーが存在しない
FATAL: database "dbname" does not exist
→ データベースが存在しない
FATAL: password authentication failed
→ パスワードが間違っている
FATAL: no pg_hba.conf entry for host
→ pg_hba.conf の設定が不適切
バックアップとメンテナンス

データベースのバックアップ
pg_dump を使用したバックアップ
# 単一データベースのバックアップ
sudo -u postgres pg_dump myapp_db > myapp_db_backup.sql
# 全データベースのバックアップ
sudo -u postgres pg_dumpall > all_databases_backup.sql
# 圧縮バックアップ
sudo -u postgres pg_dump -Fc myapp_db > myapp_db_backup.dump
# 自動バックアップスクリプトの例
cat > /usr/local/bin/postgresql_backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/postgresql"
mkdir -p $BACKUP_DIR
# 全データベースのバックアップ
sudo -u postgres pg_dumpall > $BACKUP_DIR/backup_$DATE.sql
gzip $BACKUP_DIR/backup_$DATE.sql
# 7日以上古いバックアップを削除
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete
EOF
chmod +x /usr/local/bin/postgresql_backup.sh
復元方法
バックアップからの復元
# SQL形式からの復元
sudo -u postgres psql myapp_db < myapp_db_backup.sql
# カスタム形式からの復元
sudo -u postgres pg_restore -d myapp_db myapp_db_backup.dump
# 全データベースの復元
sudo -u postgres psql < all_databases_backup.sql
定期メンテナンス
データベースの最適化
-- テーブルの統計情報更新
ANALYZE;
-- 不要な領域の回収
VACUUM;
-- フル VACUUM(メンテナンス時間中に実行)
VACUUM FULL;
-- 自動 VACUUM の設定確認
SHOW autovacuum;
パフォーマンス最適化

基本的なチューニング
メモリ設定の最適化
# postgresql.conf での設定
# 共有バッファ(システムメモリの25%)
shared_buffers = 1GB
# 実効キャッシュサイズ(システムメモリの75%)
effective_cache_size = 3GB
# ワークメモリ(メモリ / max_connections / 4)
work_mem = 10MB
# メンテナンス用ワークメモリ
maintenance_work_mem = 256MB
WAL(Write-Ahead Logging)の設定
# WAL 設定
wal_buffers = 16MB
checkpoint_completion_target = 0.8
max_wal_size = 2GB
min_wal_size = 1GB
パフォーマンス監視
統計情報の確認
-- 接続数の確認
SELECT count(*) FROM pg_stat_activity;
-- データベースの統計
SELECT * FROM pg_stat_database;
-- テーブルの統計
SELECT * FROM pg_stat_user_tables;
-- インデックスの使用状況
SELECT * FROM pg_stat_user_indexes;
-- 実行中のクエリ
SELECT pid, state, query FROM pg_stat_activity WHERE state = 'active';
まとめ
PostgreSQLのLinuxでのインストールは、各ディストリビューションに応じた方法で確実に行えます。
インストール方法 | 難易度 | 推奨度 | 適用場面 |
---|---|---|---|
パッケージ管理(apt/dnf) | ★☆☆ | ★★★ | 一般的な用途、本番環境 |
公式リポジトリ | ★★☆ | ★★★ | 最新版が必要な場合 |
ソースビルド | ★★★ | ★☆☆ | 特殊な要件、学習目的 |
成功のポイント
- 適切な方法選択:用途に応じたインストール方法の選択
- セキュリティ設定:認証方式とアクセス制御の適切な設定
- 定期メンテナンス:バックアップと最適化の実施
- 監視体制:ログ監視とパフォーマンス確認
- 文書化:設定内容と手順の記録
次のステップ
- アプリケーションとの連携設定
- レプリケーション設定(高可用性)
- 監視システムの導入
- パフォーマンスチューニング
- セキュリティ強化策の実施
この手順に従えば、Linux環境で安定したPostgreSQL環境を構築できます。企業システムから個人プロジェクトまで、幅広い用途に対応できる強力なデータベースサーバーが完成します。
コメント