UbuntuでPostgreSQLをインストールする方法

LightNode
By LightNode ·

はじめに

PostgreSQL(一般的にPostgresとも呼ばれます)は、強力でオープンソースのオブジェクトリレーショナルデータベースシステムです。30年以上にわたる活発な開発により、PostgreSQLはその信頼性、機能の豊富さ、パフォーマンスで高い評価を得ています。

UbuntuでPostgreSQLをインストールすることは、多くの開発者やデータベース管理者にとって人気の選択肢です。その理由は以下の通りです:

  1. 互換性:Ubuntuは最も広く使用されているLinuxディストリビューションの1つであり、PostgreSQLとの互換性が非常に高いです。

  2. パフォーマンス:Ubuntuの効率性とPostgreSQLの堅牢なアーキテクチャを組み合わせることで、高性能なデータベース操作が可能です。

  3. セキュリティ:UbuntuとPostgreSQLはどちらも強力なセキュリティ機能で知られており、機密データの取り扱いに最適です。

  4. コミュニティサポート:UbuntuとPostgreSQLはどちらも活発なコミュニティが存在し、必要なときにサポートを受けられます。

  5. 無料かつオープンソース:どちらのシステムも無料で利用でき、オープンソースであるため、コストを抑えつつ必要に応じてカスタマイズが可能です。

このガイドでは、UbuntuシステムにPostgreSQLをインストールし、基本的な使用方法を解説します。開発環境の構築から本番サーバーの準備まで、このチュートリアルを参考にPostgreSQLを簡単に設定できます。

必要条件

インストールを開始する前に、システムが必要な条件を満たしているか確認し、適切な権限があることを確認しましょう。

Ubuntuのシステム要件

  1. Ubuntuのバージョン:このガイドはUbuntu 20.04 LTS(Focal Fossa)以降のバージョンに対応しています。安定性のため、常に最新のLTSバージョンを使用することをおすすめします。

  2. システムリソース:PostgreSQLは限られたリソースでも動作しますが、最適なパフォーマンスを得るには以下を推奨します:

    • CPU:1 GHz以上のプロセッサ
    • RAM:1 GB以上(本番環境では4 GB以上を推奨)
    • ストレージ:PostgreSQLのインストールに512 MB、さらにデータベース用に十分な空き容量
  3. インターネット接続:PostgreSQLとその依存関係をダウンロードするために、アクティブなインターネット接続が必要です。

ユーザー権限

PostgreSQLをインストールするには、Ubuntuシステム上でsudo権限が必要です。つまり、rootユーザーとしてログインしているか、sudoを使用してコマンドを実行できるアカウントである必要があります。

以下のコマンドでsudo権限があるか確認できます:

sudo -v

パスワード入力を求められ、エラーが発生せずにコマンドが実行されれば、sudo権限があります。

ターミナルアクセス

このインストールと設定プロセスの大部分はターミナルで行うため、コマンドラインインターフェース(CLI)の使用に慣れている必要があります。

データのバックアップ

重要なデータが既に存在するシステムにPostgreSQLをインストールする場合は、大規模なソフトウェアインストールを行う前にデータをバックアップすることをおすすめします。

システムの更新

PostgreSQLをインストールする前に、Ubuntuシステムを最新の状態にすることが重要です。このステップは以下の理由で重要です:

  1. セキュリティ:更新には重要なセキュリティパッチが含まれます。
  2. 安定性:最新の更新により、バグ修正やシステムの安定性が向上します。
  3. 互換性:最新パッケージを使用することで、PostgreSQLインストール時の潜在的な互換性の問題を回避できます。

Ubuntuの更新手順

  1. ターミナルを開く
    Ctrl + Alt + Tを押すか、Ubuntuダッシュボードで「Terminal」を検索します。

  2. パッケージリストを更新する
    以下のコマンドを実行して、アップグレードや新しいパッケージインストールのためのリストを更新します:

    sudo apt update
    
  3. インストール済みパッケージをアップグレードする
    以下のコマンドで既存のパッケージを最新バージョンにアップグレードします:

    sudo apt upgrade
    
  4. フルシステムアップグレード(オプション)
    依存関係を考慮したアップグレードを実行するには、以下のコマンドを使用します:

    sudo apt full-upgrade
    
  5. システムを再起動する
    アップグレード後、変更を適用するために再起動します:

    sudo reboot
    

更新の確認

再起動後、以下のコマンドで更新が成功したことを確認できます:

lsb_release -a

Ubuntuのバージョン番号を含むディストリビューション情報が表示されます。

PostgreSQLリポジトリの追加

UbuntuのデフォルトリポジトリにもPostgreSQLは含まれていますが、通常は最新バージョンではありません。最新の安定版PostgreSQLをインストールするために、公式PostgreSQLリポジトリをシステムに追加します。

公式PostgreSQLリポジトリを追加する理由

  1. 最新バージョン:公式リポジトリには最新のPostgreSQLバージョンが提供されます。
  2. 迅速な更新:セキュリティパッチやバグ修正が迅速に提供されます。
  3. 一貫性:公式リポジトリを使用することで、PostgreSQLとその拡張機能間の互換性が確保されます。

PostgreSQLリポジトリの追加手順

  1. PostgreSQLの署名キーを追加する
    以下のコマンドを実行して、インストールするパッケージが正規品であることを確認する署名キーを追加します:

    sudo apt-get install wget ca-certificates
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    
  2. 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'
    
  3. パッケージリストを再更新する
    新たに追加したリポジトリを適用するため、以下を実行します:

    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が正しくインストールされ、動作しているかを確認することが重要です。以下の方法で確認してください:

  1. PostgreSQLのバージョンを確認

    psql --version
    

    このコマンドを実行すると、インストールされたPostgreSQLのバージョンが表示されます。

  2. PostgreSQLサービスのステータスを確認

    sudo systemctl status postgresql
    

    サービスが正常に動作している場合、active (running)と表示されます。

  3. PostgreSQLが接続を受け付けているか確認

    sudo ss -tunelp | grep 5432
    

    このコマンドは、PostgreSQLがデフォルトポート(5432)でリッスンしているかを確認します。正しく動作していれば、出力が表示されます。

PostgreSQLの初期セットアップ

UbuntuにPostgreSQLをインストールすると、デフォルトでpostgresという新しいユーザーアカウントが作成されます。このアカウントは、PostgreSQLのデフォルトロールに関連付けられています。このアカウントを使用してPostgreSQLとやり取りするには、以下の手順に従います:

  1. postgresユーザーに切り替える

    sudo -i -u postgres
    
  2. PostgreSQLプロンプトにアクセスする

    psql
    

    これでPostgreSQLのプロンプトにログインでき、以下のような画面が表示されます:

    psql (13.x)
    Type "help" for help.
    
    postgres=#
    
  3. PostgreSQLプロンプトからの退出: PostgreSQLプロンプトを終了するには、次のコマンドを入力します:

    \q
    
  4. 通常のユーザーアカウントに戻る: 通常のユーザーアカウントに戻るには、次のコマンドを入力します:

    exit
    

これで、UbuntuにPostgreSQLを正常にインストールできました。次のセクションでは、PostgreSQLの構成方法について解説します。

PostgreSQLの設定

PostgreSQLをインストールした後は、プロジェクトに適した設定を行うことが重要です。このセクションでは、新しいデータベースの作成、新しいユーザーの設定、および認証方法の構成について説明します。

新しいデータベースの作成

PostgreSQLはデフォルトでpostgresというデータベースを作成しますが、プロジェクトごとに別のデータベースを作成することをおすすめします。以下の手順で新しいデータベースを作成します:

  1. postgresユーザーに切り替える

    sudo -i -u postgres
    
  2. PostgreSQLプロンプトにアクセスする

    psql
    
  3. CREATE DATABASEコマンドでデータベースを作成

    CREATE DATABASE myproject;
    

    myprojectを作成したいデータベース名に置き換えてください。

  4. データベースの作成を確認

    \l
    

    これで、すべてのデータベースが一覧表示されます。

新しいユーザーの設定

アプリケーションごとに新しいユーザーを作成し、デフォルトのpostgresスーパーユーザーの使用を避けることをおすすめします。以下の手順で新しいユーザーを作成します:

  1. psqlプロンプト内で新しいユーザーを作成

    CREATE USER myuser WITH PASSWORD 'mypassword';
    

    myusermypasswordを希望するユーザー名とパスワードに置き換えてください。

  2. 新しいユーザーにデータベースへの権限を付与

    GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;
    
  3. ユーザーの作成を確認

    \du
    

    これで、すべてのユーザーとそのロールが一覧表示されます。

認証方法の構成

PostgreSQLでは、認証方法がpg_hba.confファイルで構成されています。以下の手順で認証設定を変更します:

  1. PostgreSQLプロンプトを終了

    \q
    
  2. pg_hba.confファイルをテキストエディタで開く(sudo権限が必要な場合があります):

    sudo nano /etc/postgresql/13/main/pg_hba.conf
    

    ※ PostgreSQLのバージョンが異なる場合は、13を適切なバージョン番号に置き換えてください。

  3. 認証設定を確認および変更: 以下のような構成が典型的です:

    # 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ユーザー名と一致する場合に接続許可
  4. 変更を保存してエディタを終了

  5. PostgreSQLを再起動して設定を適用

    sudo systemctl restart postgresql
    

これらは基本的な設定です。特に本番環境では、セキュリティを考慮してさらなる調整が必要になる場合があります。

PostgreSQLの基本コマンド

PostgreSQLのインストールと設定が完了したら、データベースとやり取りするための基本コマンドを学びましょう。これらのコマンドは、データベース管理やテーブル操作、基本的な操作を行う際に役立ちます。

PostgreSQLへの接続

  1. postgresユーザーとして接続

    sudo -i -u postgres
    
  2. PostgreSQLの対話型ターミナルを開始

    psql
    
  3. 特定のデータベースに接続

    psql -d myproject
    

    myprojectを接続したいデータベース名に置き換えてください。

データベース操作

  1. すべてのデータベースを一覧表示

    \l
    
  2. 特定のデータベースに接続

    \c myproject
    
  3. 新しいデータベースを作成

    CREATE DATABASE newdb;
    
  4. データベースを削除

    DROP DATABASE newdb;
    
### テーブル操作

1. **現在のデータベース内のテーブルを一覧表示**:
   ```sql
   \dt
  1. 新しいテーブルを作成

    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(100) UNIQUE NOT NULL
    );
    
  2. テーブル構造を確認

    \d users
    
  3. テーブルを削除

    DROP TABLE users;
    

基本的なクエリ例

  1. テーブルにデータを挿入

    INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
    
  2. テーブル内の全データを選択

    SELECT * FROM users;
    
  3. テーブル内のデータを更新

    UPDATE users SET name = 'Jane Doe' WHERE id = 1;
    
  4. テーブル内のデータを削除

    DELETE FROM users WHERE id = 1;
    

その他の便利なコマンド

  1. PostgreSQLのバージョンを表示

    SELECT version();
    
  2. すべてのユーザーとそのロールを一覧表示

    \du
    
  3. 現在のユーザーとデータベースを確認

    \conninfo
    
  4. ファイルからコマンドを実行

    \i filename.sql
    
  5. psqlを終了

    \q
    

これらはPostgreSQLの基本的な操作を始めるのに役立つコマンドです。PostgreSQLにはさらに高度な機能やコマンドが多数用意されており、複雑な操作や最適化にも対応できます。

PostgreSQLのメンテナンス

PostgreSQLを適切にメンテナンスすることで、パフォーマンスの最適化、データの整合性、およびセキュリティを確保できます。このセクションでは、基本的なメンテナンス作業について説明します。

PostgreSQLサービスの起動と停止

  1. PostgreSQLサービスを開始

    sudo systemctl start postgresql
    
  2. PostgreSQLサービスを停止

    sudo systemctl stop postgresql
    
  3. PostgreSQLサービスを再起動

    sudo systemctl restart postgresql
    
  4. PostgreSQLサービスのステータスを確認

    sudo systemctl status postgresql
    

データベースのバックアップと復元

データ保護のために定期的なバックアップを取ることは非常に重要です。PostgreSQLではバックアップと復元のための複数の方法が提供されています。

バックアップの作成

  1. 単一のデータベースをバックアップ

    pg_dump dbname > dbname.sql
    
  2. すべてのデータベースをバックアップ

    pg_dumpall > all_databases.sql
    

バックアップからの復元

  1. 単一のデータベースを復元する

    psql dbname < dbname.sql
    
  2. すべてのデータベースを復元する

    psql -f all_databases.sql postgres
    

PostgreSQLの更新

PostgreSQLを最新バージョンに保つことは、セキュリティとパフォーマンス向上のために重要です。以下の手順で更新を行います:

  1. パッケージリストを更新

    sudo apt update
    
  2. PostgreSQLをアップグレード

    sudo apt upgrade postgresql postgresql-contrib
    

PostgreSQLのモニタリング

  1. アクティブな接続を確認

    SELECT * FROM pg_stat_activity;
    
  2. データベースのサイズを確認

    SELECT pg_size_pretty(pg_database_size('dbname'));
    
  3. テーブルサイズを確認

    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コマンドを使用してこれを管理します:

  1. 特定のテーブルをVacuumする

    VACUUM tablename;
    
  2. データベース全体をVacuumしてAnalyze(統計を更新)する

    VACUUM ANALYZE;
    
  3. 自動Vacuumの確認postgresql.confファイルで以下を有効にしていることを確認します:

    autovacuum = on
    

ログ管理

PostgreSQLのログは、トラブルシューティングやパフォーマンス調整に役立つ情報を提供します:

  1. ログファイルの場所を確認

    SHOW log_directory;
    SHOW log_filename;
    
  2. ログ設定の変更postgresql.confファイルでログに関する設定を調整できます。これにより、どの内容をログに記録するか、どのように記録するかを制御できます。

トラブルシューティングの一般的な問題

PostgreSQLのセットアップや運用中に、問題が発生することがあります。以下は、よくある問題とその解決方法です:

権限の問題

  1. 問題:"Permission denied"エラーが発生する。

    解決方法

    • 必要な権限がユーザーに付与されているか確認:
      sudo -i -u postgres
      createuser --interactive
      
    • データベースに対して必要な権限を付与:
      GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
      
  2. 問題:UbuntuユーザーでPostgreSQLにアクセスできない。

    解決方法

    • Ubuntuユーザー名と同じ名前のPostgreSQLロールを作成:
      sudo -u postgres createuser --interactive
      

接続の問題

  1. 問題"Connection refused"エラーが発生する。

    解決方法

    • PostgreSQLが実行中か確認:
      sudo systemctl status postgresql
      
    • 実行されていない場合は、以下で起動:
      sudo systemctl start postgresql
      
    • postgresql.confで正しいアドレスをリッスンしているか確認:
      listen_addresses = 'localhost'  # すべてのインターフェースの場合は '*'
      
  2. 問題:リモート接続ができない。

    解決方法

    • pg_hba.confを編集し、リモート接続を許可:
      host    all    all    0.0.0.0/0    md5
      
    • postgresql.confで以下を設定:
      listen_addresses = '*'
      
    • PostgreSQLを再起動:
      sudo systemctl restart postgresql
      

バージョンの競合

  1. 問題:PostgreSQLのバージョンとインストール済みの拡張機能が非互換。

    解決方法

    • PostgreSQLのバージョンを確認:
      psql --version
      
    • 拡張機能が互換性を持つバージョンか確認し、必要に応じて拡張機能をアップグレード:
      ALTER EXTENSION extension_name UPDATE TO 'new_version';
      

パフォーマンスの問題

  1. 問題:クエリが遅い、または全体的なパフォーマンスが低下。

    解決方法

    • 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
      
  2. 問題:データベースの膨張がパフォーマンスを低下させる。

    解決方法

    • 定期的にVACUUMANALYZEを実行:
      VACUUM ANALYZE;
      
    • 自動メンテナンスを有効にするため、autovacuumを確認:
      autovacuum = on
      

ディスクスペースの問題

  1. 問題:ディスクスペースが不足している。

    解決方法

    • 大きなテーブルとインデックスを特定:
      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のバージョンに応じて手順が異なる場合があります。重大な変更を行う前に、必ずデータのバックアップを取得してください。

Ubuntuで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.confpg_hba.confファイルを編集する必要があります。postgresql.conflisten_addresses = '*'を設定し、pg_hba.confに以下のような行を追加してください:

host all all 0.0.0.0/0 md5

設定を変更した後、PostgreSQLを再起動するのを忘れないでください。

Q: PostgreSQLでTRUNCATEDELETEの違いは?

A: TRUNCATEはすべての行を個別にスキャンせずにテーブルから削除するため、高速です。一方、DELETEは行を1つずつ削除し、それをトランザクションログに記録します。さらに、TRUNCATEはシーケンスをリセットし、DELETEトリガーは起動しません。

Q: PostgreSQLのパフォーマンスを改善するには?

A: パフォーマンスを向上させる方法はいくつかあります:

  • 適切なインデックスの作成
  • 定期的なVACUUMANALYZE
  • クエリの最適化
  • PostgreSQL構成パラメータの調整
  • ハードウェアのアップグレード(特にRAMの増設)