UbuntuでPostgreSQLをインストールする方法
はじめに
PostgreSQL(一般的にPostgresとも呼ばれます)は、強力でオープンソースのオブジェクトリレーショナルデータベースシステムです。30年以上にわたる活発な開発により、PostgreSQLはその信頼性、機能の豊富さ、パフォーマンスで高い評価を得ています。
UbuntuでPostgreSQLをインストールすることは、多くの開発者やデータベース管理者にとって人気の選択肢です。その理由は以下の通りです:
-
互換性:Ubuntuは最も広く使用されているLinuxディストリビューションの1つであり、PostgreSQLとの互換性が非常に高いです。
-
パフォーマンス:Ubuntuの効率性とPostgreSQLの堅牢なアーキテクチャを組み合わせることで、高性能なデータベース操作が可能です。
-
セキュリティ:UbuntuとPostgreSQLはどちらも強力なセキュリティ機能で知られており、機密データの取り扱いに最適です。
-
コミュニティサポート:UbuntuとPostgreSQLはどちらも活発なコミュニティが存在し、必要なときにサポートを受けられます。
-
無料かつオープンソース:どちらのシステムも無料で利用でき、オープンソースであるため、コストを抑えつつ必要に応じてカスタマイズが可能です。
このガイドでは、UbuntuシステムにPostgreSQLをインストールし、基本的な使用方法を解説します。開発環境の構築から本番サーバーの準備まで、このチュートリアルを参考にPostgreSQLを簡単に設定できます。
必要条件
インストールを開始する前に、システムが必要な条件を満たしているか確認し、適切な権限があることを確認しましょう。
Ubuntuのシステム要件
-
Ubuntuのバージョン:このガイドはUbuntu 20.04 LTS(Focal Fossa)以降のバージョンに対応しています。安定性のため、常に最新のLTSバージョンを使用することをおすすめします。
-
システムリソース:PostgreSQLは限られたリソースでも動作しますが、最適なパフォーマンスを得るには以下を推奨します:
- CPU:1 GHz以上のプロセッサ
- RAM:1 GB以上(本番環境では4 GB以上を推奨)
- ストレージ:PostgreSQLのインストールに512 MB、さらにデータベース用に十分な空き容量
-
インターネット接続:PostgreSQLとその依存関係をダウンロードするために、アクティブなインターネット接続が必要です。
ユーザー権限
PostgreSQLをインストールするには、Ubuntuシステム上でsudo
権限が必要です。つまり、rootユーザーとしてログインしているか、sudo
を使用してコマンドを実行できるアカウントである必要があります。
以下のコマンドでsudo
権限があるか確認できます:
sudo -v
パスワード入力を求められ、エラーが発生せずにコマンドが実行されれば、sudo
権限があります。
ターミナルアクセス
このインストールと設定プロセスの大部分はターミナルで行うため、コマンドラインインターフェース(CLI)の使用に慣れている必要があります。
データのバックアップ
重要なデータが既に存在するシステムにPostgreSQLをインストールする場合は、大規模なソフトウェアインストールを行う前にデータをバックアップすることをおすすめします。
システムの更新
PostgreSQLをインストールする前に、Ubuntuシステムを最新の状態にすることが重要です。このステップは以下の理由で重要です:
- セキュリティ:更新には重要なセキュリティパッチが含まれます。
- 安定性:最新の更新により、バグ修正やシステムの安定性が向上します。
- 互換性:最新パッケージを使用することで、PostgreSQLインストール時の潜在的な互換性の問題を回避できます。
Ubuntuの更新手順
-
ターミナルを開く
Ctrl + Alt + T
を押すか、Ubuntuダッシュボードで「Terminal」を検索します。 -
パッケージリストを更新する
以下のコマンドを実行して、アップグレードや新しいパッケージインストールのためのリストを更新します:sudo apt update
-
インストール済みパッケージをアップグレードする
以下のコマンドで既存のパッケージを最新バージョンにアップグレードします:sudo apt upgrade
-
フルシステムアップグレード(オプション)
依存関係を考慮したアップグレードを実行するには、以下のコマンドを使用します:sudo apt full-upgrade
-
システムを再起動する
アップグレード後、変更を適用するために再起動します:sudo reboot
更新の確認
再起動後、以下のコマンドで更新が成功したことを確認できます:
lsb_release -a
Ubuntuのバージョン番号を含むディストリビューション情報が表示されます。
PostgreSQLリポジトリの追加
UbuntuのデフォルトリポジトリにもPostgreSQLは含まれていますが、通常は最新バージョンではありません。最新の安定版PostgreSQLをインストールするために、公式PostgreSQLリポジトリをシステムに追加します。
公式PostgreSQLリポジトリを追加する理由
- 最新バージョン:公式リポジトリには最新のPostgreSQLバージョンが提供されます。
- 迅速な更新:セキュリティパッチやバグ修正が迅速に提供されます。
- 一貫性:公式リポジトリを使用することで、PostgreSQLとその拡張機能間の互換性が確保されます。
PostgreSQLリポジトリの追加手順
-
PostgreSQLの署名キーを追加する
以下のコマンドを実行して、インストールするパッケージが正規品であることを確認する署名キーを追加します:sudo apt-get install wget ca-certificates wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-
PostgreSQLリポジトリをシステムに追加する
次のコマンドで、リポジトリ情報をpgdg.list
ファイルに追加します:sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
-
パッケージリストを再更新する
新たに追加したリポジトリを適用するため、以下を実行します:sudo apt update
リポジトリ追加の確認
以下のコマンドでリポジトリが正しく追加されたか確認できます:
cat /etc/apt/sources.list.d/pgdg.list
次のような行が表示されます:
deb http://apt.postgresql.org/pub/repos/
(Note: "focal" might be replaced with your Ubuntu version's codename)
PostgreSQLのインストール
PostgreSQLリポジトリを追加し、システムを更新したので、いよいよPostgreSQLのインストールを進めます。このプロセスはシンプルで、いくつかのコマンドを実行するだけで完了します。
PostgreSQLをインストールするためのコマンド
PostgreSQLをインストールするには、apt
パッケージマネージャーを使用します。以下のコマンドを実行して、最新のPostgreSQLバージョンと一般的な拡張機能をインストールします:
sudo apt install postgresql postgresql-contrib
このコマンドの内容を簡単に説明します:
postgresql
:PostgreSQLのコアパッケージ。postgresql-contrib
:PostgreSQL本体には含まれていない追加ユーティリティや便利な機能を含むパッケージ。
インストール中に確認メッセージが表示される場合があります。その際は、Y
を入力してEnterキーを押すことでインストールが続行されます。
インストールの確認
インストール後、PostgreSQLが正しくインストールされ、動作しているかを確認することが重要です。以下の方法で確認してください:
-
PostgreSQLのバージョンを確認:
psql --version
このコマンドを実行すると、インストールされたPostgreSQLのバージョンが表示されます。
-
PostgreSQLサービスのステータスを確認:
sudo systemctl status postgresql
サービスが正常に動作している場合、
active (running)
と表示されます。 -
PostgreSQLが接続を受け付けているか確認:
sudo ss -tunelp | grep 5432
このコマンドは、PostgreSQLがデフォルトポート(5432)でリッスンしているかを確認します。正しく動作していれば、出力が表示されます。
PostgreSQLの初期セットアップ
UbuntuにPostgreSQLをインストールすると、デフォルトでpostgres
という新しいユーザーアカウントが作成されます。このアカウントは、PostgreSQLのデフォルトロールに関連付けられています。このアカウントを使用してPostgreSQLとやり取りするには、以下の手順に従います:
-
postgresユーザーに切り替える:
sudo -i -u postgres
-
PostgreSQLプロンプトにアクセスする:
psql
これでPostgreSQLのプロンプトにログインでき、以下のような画面が表示されます:
psql (13.x) Type "help" for help. postgres=#
-
PostgreSQLプロンプトからの退出: PostgreSQLプロンプトを終了するには、次のコマンドを入力します:
\q
-
通常のユーザーアカウントに戻る: 通常のユーザーアカウントに戻るには、次のコマンドを入力します:
exit
これで、UbuntuにPostgreSQLを正常にインストールできました。次のセクションでは、PostgreSQLの構成方法について解説します。
PostgreSQLの設定
PostgreSQLをインストールした後は、プロジェクトに適した設定を行うことが重要です。このセクションでは、新しいデータベースの作成、新しいユーザーの設定、および認証方法の構成について説明します。
新しいデータベースの作成
PostgreSQLはデフォルトでpostgres
というデータベースを作成しますが、プロジェクトごとに別のデータベースを作成することをおすすめします。以下の手順で新しいデータベースを作成します:
-
postgresユーザーに切り替える:
sudo -i -u postgres
-
PostgreSQLプロンプトにアクセスする:
psql
-
CREATE DATABASEコマンドでデータベースを作成:
CREATE DATABASE myproject;
myproject
を作成したいデータベース名に置き換えてください。 -
データベースの作成を確認:
\l
これで、すべてのデータベースが一覧表示されます。
新しいユーザーの設定
アプリケーションごとに新しいユーザーを作成し、デフォルトのpostgres
スーパーユーザーの使用を避けることをおすすめします。以下の手順で新しいユーザーを作成します:
-
psqlプロンプト内で新しいユーザーを作成:
CREATE USER myuser WITH PASSWORD 'mypassword';
myuser
とmypassword
を希望するユーザー名とパスワードに置き換えてください。 -
新しいユーザーにデータベースへの権限を付与:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;
-
ユーザーの作成を確認:
\du
これで、すべてのユーザーとそのロールが一覧表示されます。
認証方法の構成
PostgreSQLでは、認証方法がpg_hba.conf
ファイルで構成されています。以下の手順で認証設定を変更します:
-
PostgreSQLプロンプトを終了:
\q
-
pg_hba.conf
ファイルをテキストエディタで開く(sudo権限が必要な場合があります):sudo nano /etc/postgresql/13/main/pg_hba.conf
※ PostgreSQLのバージョンが異なる場合は、
13
を適切なバージョン番号に置き換えてください。 -
認証設定を確認および変更: 以下のような構成が典型的です:
# TYPE DATABASE USER ADDRESS METHOD local all postgres peer local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 md5
local
: Unixドメインソケット経由で接続host
: TCP/IP経由で接続md5
: パスワード認証peer
: システムユーザー名がPostgreSQLユーザー名と一致する場合に接続許可
-
変更を保存してエディタを終了。
-
PostgreSQLを再起動して設定を適用:
sudo systemctl restart postgresql
これらは基本的な設定です。特に本番環境では、セキュリティを考慮してさらなる調整が必要になる場合があります。
PostgreSQLの基本コマンド
PostgreSQLのインストールと設定が完了したら、データベースとやり取りするための基本コマンドを学びましょう。これらのコマンドは、データベース管理やテーブル操作、基本的な操作を行う際に役立ちます。
PostgreSQLへの接続
-
postgresユーザーとして接続:
sudo -i -u postgres
-
PostgreSQLの対話型ターミナルを開始:
psql
-
特定のデータベースに接続:
psql -d myproject
myproject
を接続したいデータベース名に置き換えてください。
データベース操作
-
すべてのデータベースを一覧表示:
\l
-
特定のデータベースに接続:
\c myproject
-
新しいデータベースを作成:
CREATE DATABASE newdb;
-
データベースを削除:
DROP DATABASE newdb;
### テーブル操作
1. **現在のデータベース内のテーブルを一覧表示**:
```sql
\dt
-
新しいテーブルを作成:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE NOT NULL );
-
テーブル構造を確認:
\d users
-
テーブルを削除:
DROP TABLE users;
基本的なクエリ例
-
テーブルにデータを挿入:
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
-
テーブル内の全データを選択:
SELECT * FROM users;
-
テーブル内のデータを更新:
UPDATE users SET name = 'Jane Doe' WHERE id = 1;
-
テーブル内のデータを削除:
DELETE FROM users WHERE id = 1;
その他の便利なコマンド
-
PostgreSQLのバージョンを表示:
SELECT version();
-
すべてのユーザーとそのロールを一覧表示:
\du
-
現在のユーザーとデータベースを確認:
\conninfo
-
ファイルからコマンドを実行:
\i filename.sql
-
psqlを終了:
\q
これらはPostgreSQLの基本的な操作を始めるのに役立つコマンドです。PostgreSQLにはさらに高度な機能やコマンドが多数用意されており、複雑な操作や最適化にも対応できます。
PostgreSQLのメンテナンス
PostgreSQLを適切にメンテナンスすることで、パフォーマンスの最適化、データの整合性、およびセキュリティを確保できます。このセクションでは、基本的なメンテナンス作業について説明します。
PostgreSQLサービスの起動と停止
-
PostgreSQLサービスを開始:
sudo systemctl start postgresql
-
PostgreSQLサービスを停止:
sudo systemctl stop postgresql
-
PostgreSQLサービスを再起動:
sudo systemctl restart postgresql
-
PostgreSQLサービスのステータスを確認:
sudo systemctl status postgresql
データベースのバックアップと復元
データ保護のために定期的なバックアップを取ることは非常に重要です。PostgreSQLではバックアップと復元のための複数の方法が提供されています。
バックアップの作成
-
単一のデータベースをバックアップ:
pg_dump dbname > dbname.sql
-
すべてのデータベースをバックアップ:
pg_dumpall > all_databases.sql
バックアップからの復元
-
単一のデータベースを復元する:
psql dbname < dbname.sql
-
すべてのデータベースを復元する:
psql -f all_databases.sql postgres
PostgreSQLの更新
PostgreSQLを最新バージョンに保つことは、セキュリティとパフォーマンス向上のために重要です。以下の手順で更新を行います:
-
パッケージリストを更新:
sudo apt update
-
PostgreSQLをアップグレード:
sudo apt upgrade postgresql postgresql-contrib
PostgreSQLのモニタリング
-
アクティブな接続を確認:
SELECT * FROM pg_stat_activity;
-
データベースのサイズを確認:
SELECT pg_size_pretty(pg_database_size('dbname'));
-
テーブルサイズを確認:
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
VacuumとAnalyze
PostgreSQLはMVCC(Multi-Version Concurrency Control)を使用しており、これによりテーブルやインデックスに膨張が発生する可能性があります。VACUUM
コマンドを使用してこれを管理します:
-
特定のテーブルをVacuumする:
VACUUM tablename;
-
データベース全体をVacuumしてAnalyze(統計を更新)する:
VACUUM ANALYZE;
-
自動Vacuumの確認:
postgresql.conf
ファイルで以下を有効にしていることを確認します:autovacuum = on
ログ管理
PostgreSQLのログは、トラブルシューティングやパフォーマンス調整に役立つ情報を提供します:
-
ログファイルの場所を確認:
SHOW log_directory; SHOW log_filename;
-
ログ設定の変更:
postgresql.conf
ファイルでログに関する設定を調整できます。これにより、どの内容をログに記録するか、どのように記録するかを制御できます。
トラブルシューティングの一般的な問題
PostgreSQLのセットアップや運用中に、問題が発生することがあります。以下は、よくある問題とその解決方法です:
権限の問題
-
問題:"Permission denied"エラーが発生する。
解決方法:
- 必要な権限がユーザーに付与されているか確認:
sudo -i -u postgres createuser --interactive
- データベースに対して必要な権限を付与:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
- 必要な権限がユーザーに付与されているか確認:
-
問題:UbuntuユーザーでPostgreSQLにアクセスできない。
解決方法:
- Ubuntuユーザー名と同じ名前のPostgreSQLロールを作成:
sudo -u postgres createuser --interactive
- Ubuntuユーザー名と同じ名前のPostgreSQLロールを作成:
接続の問題
-
問題:
"Connection refused"
エラーが発生する。解決方法:
- PostgreSQLが実行中か確認:
sudo systemctl status postgresql
- 実行されていない場合は、以下で起動:
sudo systemctl start postgresql
postgresql.conf
で正しいアドレスをリッスンしているか確認:listen_addresses = 'localhost' # すべてのインターフェースの場合は '*'
- PostgreSQLが実行中か確認:
-
問題:リモート接続ができない。
解決方法:
pg_hba.conf
を編集し、リモート接続を許可:host all all 0.0.0.0/0 md5
postgresql.conf
で以下を設定:listen_addresses = '*'
- PostgreSQLを再起動:
sudo systemctl restart postgresql
バージョンの競合
-
問題:PostgreSQLのバージョンとインストール済みの拡張機能が非互換。
解決方法:
- PostgreSQLのバージョンを確認:
psql --version
- 拡張機能が互換性を持つバージョンか確認し、必要に応じて拡張機能をアップグレード:
ALTER EXTENSION extension_name UPDATE TO 'new_version';
- PostgreSQLのバージョンを確認:
パフォーマンスの問題
-
問題:クエリが遅い、または全体的なパフォーマンスが低下。
解決方法:
EXPLAIN ANALYZE
を使用してクエリの実行を分析:EXPLAIN ANALYZE SELECT * FROM large_table WHERE condition;
- 適切なインデックスを作成:
CREATE INDEX idx_name ON table_name (column_name);
postgresql.conf
でパフォーマンス設定を調整:shared_buffers = 256MB effective_cache_size = 768MB
-
問題:データベースの膨張がパフォーマンスを低下させる。
解決方法:
- 定期的に
VACUUM
とANALYZE
を実行:VACUUM ANALYZE;
- 自動メンテナンスを有効にするため、
autovacuum
を確認:autovacuum = on
- 定期的に
ディスクスペースの問題
-
問題:ディスクスペースが不足している。
解決方法:
- 大きなテーブルとインデックスを特定:
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
- 不要なデータを削除または古いデータをアーカイブ。
- 非常に大きなテーブルの場合はテーブルのパーティショニングを検討。
- 大きなテーブルとインデックスを特定:
これらは一般的な解決策です。具体的なシステム構成やPostgreSQLのバージョンに応じて手順が異なる場合があります。重大な変更を行う前に、必ずデータのバックアップを取得してください。
よくある質問 (FAQ)
Q: 現在使用しているPostgreSQLのバージョンを確認する方法は?
A: 次のコマンドをターミナルで実行してください:
psql --version
または、psqlプロンプト内で以下を実行してください:
SELECT version();
Q: 同じUbuntuシステムに複数のPostgreSQLバージョンをインストールできますか?
A: はい、可能です。ただし、ポートとデータディレクトリを適切に管理し、競合を防ぐ必要があります。
Q: PostgreSQLユーザーのパスワードを変更するには?
A: 次のSQLコマンドを使用してパスワードを変更できます:
ALTER USER username WITH PASSWORD 'new_password';
Q: PostgreSQLサーバーへのリモートアクセスを有効にするには?
A: postgresql.conf
とpg_hba.conf
ファイルを編集する必要があります。postgresql.conf
でlisten_addresses = '*'
を設定し、pg_hba.conf
に以下のような行を追加してください:
host all all 0.0.0.0/0 md5
設定を変更した後、PostgreSQLを再起動するのを忘れないでください。
Q: PostgreSQLでTRUNCATE
とDELETE
の違いは?
A: TRUNCATE
はすべての行を個別にスキャンせずにテーブルから削除するため、高速です。一方、DELETE
は行を1つずつ削除し、それをトランザクションログに記録します。さらに、TRUNCATE
はシーケンスをリセットし、DELETE
トリガーは起動しません。
Q: PostgreSQLのパフォーマンスを改善するには?
A: パフォーマンスを向上させる方法はいくつかあります:
- 適切なインデックスの作成
- 定期的な
VACUUM
とANALYZE
- クエリの最適化
- PostgreSQL構成パラメータの調整
- ハードウェアのアップグレード(特にRAMの増設)