PostgreSQLをLinuxでダウンロード・インストールする方法|初心者向け完全ガイド

PostgreSQLをLinuxでダウンロードしてインストールする方法を初心者向けに詳しく解説します。

各Linuxディストリビューション別の手順から、基本設定まで包括的にご紹介します。

スポンサーリンク
  1. PostgreSQLとは?
    1. PostgreSQLの特徴
    2. 他のデータベースとの比較
  2. インストール方法の選択肢
    1. 推奨される方法:パッケージ管理ツール
    2. 代替方法:ソースコードからビルド
  3. Ubuntu / Debian でのインストール
    1. 事前準備とシステム更新
    2. 公式リポジトリの追加
    3. PostgreSQLのインストール
    4. サービスの設定と起動
    5. 初期設定とアクセス確認
  4. CentOS / RHEL / AlmaLinux / Rocky Linux でのインストール
    1. システム準備
    2. PostgreSQL公式リポジトリの追加
    3. PostgreSQLのインストール
    4. データベースの初期化
    5. サービスの設定と起動
    6. 環境変数とパスの設定
  5. ソースコードからのインストール
    1. 必要なツールと依存関係のインストール
    2. ソースコードのダウンロードとビルド
    3. ユーザーとディレクトリの作成
    4. データベースの初期化とサービス設定
  6. 設定ファイルの編集
    1. 主要な設定ファイル
    2. postgresql.conf の基本設定
    3. pg_hba.conf の認証設定
    4. 設定変更の反映
  7. リモート接続の設定
    1. ファイアウォールの設定
    2. リモート接続テスト
  8. データベースとユーザーの作成
    1. 基本的なデータベース操作
    2. ユーザーの作成と権限管理
    3. セキュリティ強化
  9. トラブルシューティング
    1. よくある問題と対処法
    2. ログの確認方法
  10. バックアップとメンテナンス
    1. データベースのバックアップ
    2. 復元方法
    3. 定期メンテナンス
  11. パフォーマンス最適化
    1. 基本的なチューニング
    2. パフォーマンス監視
  12. まとめ

PostgreSQLとは?

PostgreSQLの特徴

PostgreSQLは、世界で最も高機能なオープンソースデータベース管理システムの一つです。

主な特徴

  • 完全なSQL準拠と高い標準適合性
  • 豊富なデータ型(JSON、配列、地理情報など)
  • 強力な拡張機能(プラグイン対応)
  • 企業レベルの信頼性とパフォーマンス
  • 無料で商用利用可能

PostgreSQLが選ばれる理由

  • 複雑なクエリと高度な機能が必要な場合
  • データの整合性を重視するシステム
  • 地理情報システム(GIS)での利用
  • ビッグデータや分析用途
  • Webアプリケーションのバックエンド

他のデータベースとの比較

項目PostgreSQLMySQLSQLite
用途複雑なシステム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)★☆☆★★★一般的な用途、本番環境
公式リポジトリ★★☆★★★最新版が必要な場合
ソースビルド★★★★☆☆特殊な要件、学習目的

成功のポイント

  1. 適切な方法選択:用途に応じたインストール方法の選択
  2. セキュリティ設定:認証方式とアクセス制御の適切な設定
  3. 定期メンテナンス:バックアップと最適化の実施
  4. 監視体制:ログ監視とパフォーマンス確認
  5. 文書化:設定内容と手順の記録

次のステップ

  • アプリケーションとの連携設定
  • レプリケーション設定(高可用性)
  • 監視システムの導入
  • パフォーマンスチューニング
  • セキュリティ強化策の実施

この手順に従えば、Linux環境で安定したPostgreSQL環境を構築できます。企業システムから個人プロジェクトまで、幅広い用途に対応できる強力なデータベースサーバーが完成します。

コメント

タイトルとURLをコピーしました