4. PostgreSQLの導入

この章では、Senju/QA DBサーバーとしてのPostgreSQLをインストールするための手順について説明します。

4.1. PostgreSQLのインストール

4.1.1. インストールの流れ

Windows

  1. インストール用のexeファイルを入手し、インストールするサーバーの任意のフォルダに格納します。
    ダウンロードURL:
    対象ファイル:
    • postgresql-13.5-1-windows-x64.exe

  2. インストールするサーバーに管理者権限のアカウントでログインします。

  3. exeファイルを右クリックし、コンテキストメニューから[管理者として実行]をクリックします。

  4. [Setup - PostgreSQL]画面が表示されるため、以下の操作を行います。
    1. [Next >]ボタンをクリックします。

      _images/setup.jpg

      図 4.1 Setup - PostgreSQL

  5. [Installation Directory]画面が表示されるため、以下の操作を行います。
    1. インストール先のフォルダを指定します。

    2. [Next >]ボタンをクリックします。

      _images/installation_directory.jpg

      図 4.2 Installation Directory

  6. [Select Components]画面が表示されるため、以下の操作を行います。
    1. Stack Builder のチェックを外します。

    2. [Next >]ボタンをクリックします。

      _images/select_components.jpg

      図 4.3 Select Components

  7. [Data Directory]画面が表示されるため、以下の操作を行います。
    1. データ格納先フォルダを指定します。

    2. [Next >]ボタンをクリックします。

      _images/data_directory.jpg

      図 4.4 Data Directory

  8. [Password]画面が表示されるため、以下の操作を行います。
    1. Password および Retype password にパスワードを入力します。

    2. [Next >]ボタンをクリックします。

      _images/password.jpg

      図 4.5 Password

  9. [Port]画面が表示されるため、以下の操作を行います。
    1. ポート番号を入力します。

    2. [Next >]ボタンをクリックします。

      _images/port.jpg

      図 4.6 Port

  10. [Advanced Options]画面が表示されるため、以下の操作を行います。
    1. [Default locale] を選択します。

    2. [Next >]ボタンをクリックします。

      _images/advanced_options.jpg

      図 4.7 Advanced Options

  11. [Pre Installation Summary]画面が表示されるため、以下の操作を行います。
    1. 設定情報を確認します。

    2. [Next >]ボタンをクリックします。

      _images/pre_installation_summary.jpg

      図 4.8 Pre Installation Summary

  12. [Ready to Install]画面が表示されるため、以下の操作を行います。
    1. [Next >]ボタンをクリックします。

      _images/ready_to_install.jpg

      図 4.9 Ready to Install

  13. [Installing]画面が表示されるため、以下の操作を行います。
    1. インストール完了まで操作しないでください。

      _images/installing.jpg

      図 4.10 Installing

  14. [Completing the PostgreSQL Setup Wizard]画面が表示されるため、以下の操作を行います。
    1. [Finish]ボタンをクリックします。

      _images/completing_the_postgresql_setup_wizard.jpg

      図 4.11 Completing the PostgreSQL Setup Wizard

  15. PATH環境変数にPostgreSQLのbinフォルダを登録します。

    注釈

    コマンドラインからPostgreSQLのコマンドを実行するための設定です。

    1. [スタート]ボタンを右クリックし、コンテキストメニューの[ファイル名を指定して実行(R)]をクリックします。

    2. [ファイル名を指定して実行] ダイアログが表示されるため、以下の操作を行います。
      1. [名前(O):] に sysdm.cpl と入力します。

      2. [OK] ボタンをクリックします。

    3. [システムのプロパティ] ダイアログが表示されるため、以下の操作を行います。
      1. [詳細設定] タブをクリックします。

      2. [環境変数(N)...] ボタンをクリックします。

    4. [環境変数] ダイアログが表示されるため、以下の操作を行います。
      1. [システム環境変数(S)] の [変数] Path を選択します。

      2. [編集(I)...] ボタンをクリックします。

    5. [環境変数名の編集] ダイアログが表示されるため、以下の操作を行います。
      1. [新規(N)] ボタンをクリックします。

      2. C:\Program Files\PostgreSQL\13\bin と入力します。

      3. [OK] ボタンをクリックします。

Linux

注釈

本手順によりpostgresユーザーが作成されますが、サーバーにpostgresユーザーが存在しないことを確認して下さい。 もし、postgresユーザーが存在する場合は、利用されていないことを確認しpostgresユーザーを削除して下さい。

  1. インストール用のrpmファイルを入手し、インストールするサーバーの任意のディレクトリに格納します。
    ダウンロードURL:
    対象パッケージ:
    • postgresql13-13.5-1PGDG.rhel8.x86_64.rpm

    • postgresql13-contrib-13.5-1PGDG.rhel8.x86_64.rpm

    • postgresql13-libs-13.5-1PGDG.rhel8.x86_64.rpm

    • postgresql13-server-13.5-1PGDG.rhel8.x86_64.rpm

    (ここでは各インストールパッケージ を /tmp/ 配下に格納した場合の手順を例として説明します。ほかのディレクトリに格納した場合は適宜各コマンドで指定するパスを変更してください。)

  2. インストールするサーバーに管理者権限のアカウントでログインします。

  3. rpmコマンドでパッケージをインストールします。
    # rpm -ivh /tmp/postgresql13-libs-[0-9]*rhel8.x86_64.rpm
    # rpm -ivh /tmp/postgresql13-[0-9]*rhel8.x86_64.rpm
    # rpm -ivh /tmp/postgresql13-server-[0-9]*rhel8.x86_64.rpm
    # rpm -ivh /tmp/postgresql13-contrib-[0-9]*rhel8.x86_64.rpm
    
  4. 今後の円滑なアップデートが可能なようにシンボリックリンクを設定します。
    # ln -s /usr/pgsql-13 /usr/local/pgsql
    
  5. データベースクラスタ用のディレクトリを作成します。
    # mkdir -p /opt/postgres/data
    # chown postgres:postgres /opt/postgres/data
    
  6. 自動起動時の起動設定を編集します。
    /usr/lib/systemd/system/postgresql-13.serviceEnvironment=PGDATA/opt/postgres/data/ に変更します。
    # sed -i 's,\(Environment=PGDATA=\).*,\1/opt/postgres/data/,g' /usr/lib/systemd/system/postgresql-13.service
    
    (変更前)
    Environment=PGDATA=/var/lib/pgsql/13/data/
    
    (変更後)
    Environment=PGDATA=/opt/postgres/data/
    
  7. PostgreSQLサービスを有効化します。
    # systemctl enable postgresql-13
    
  8. データベースクラスタを作成します。
    # su - postgres -c '/usr/local/pgsql/bin/initdb --no-locale --encoding=UTF8 -D /opt/postgres/data'
    

4.1.2. PostgreSQLの設定

  1. postgresql.conf ファイルを編集して設定を変更します。
    対象ファイル:
    • Windows

      • C:\Program Files\PostgreSQL\13\data\postgresql.conf

    • Linux

      • /opt/postgres/data/postgresql.conf

    1. アプリケーションサーバーとDBサーバーを分ける場合、listen_addressesを変更して外部からアクセスできるようにします。
      listen_addresses = '*'          # what IP address(es) to listen on;
      
    2. PostgreSQLのポート番号を 5432 に変更します。
      port = 5432                             # (change requires restart)
      
    3. PostgreSQLへのキープアライブ設定を idle = 60 , intarval = 5 , count = 5 に変更します。
      tcp_keepalives_idle = 60        # TCP_KEEPIDLE, in seconds;
      tcp_keepalives_interval = 5     # TCP_KEEPINTVL, in seconds;
      tcp_keepalives_count = 5        # TCP_KEEPCNT;
      
    4. PostgreSQLのシェーアードバッファの設定を 512MB に変更します。
      shared_buffers = 512MB                  # min 128kB
      
    5. PostgreSQLのログ先行書き込みの設定を max_wal_size = 2GB , min_wal_size = 1GB に変更します。
      max_wal_size = 2GB
      min_wal_size = 1GB
      
    6. Linuxの場合は ログの格納先を /var/log/postgresql に変更します。

      警告

      Windowsの場合は本設定の変更は不要です。
      log_directory = '/var/log/postgresql'
      
    7. ログの世代管理を行えるようにログファイルフォーマットとシフト方法を変更します。
      log_filename = 'postgresql-%a.log'
      log_truncate_on_rotation = on
      log_rotation_age = 1d
      log_rotation_size = 0
      
    8. 監視運用のためログファイルのパーミッションを 0644 変更します。
      log_file_mode = 0644
      
    9. ログ出力タイミングを変更し問題を検知しやすくします。
      log_min_error_statement = warning
      log_min_duration_statement = 1s
      
    10. ログ出力内容を変更し問題を検知しやすくします。
      log_checkpoints = on
      log_connections = on
      log_disconnections = on
      log_line_prefix='%m [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h'
      log_lock_waits = on
      
    11. PostgreSQLのバキューム処理のログ出力設定を変更し問題を検知しやすくします。
      log_autovacuum_min_duration = 1s
      
    12. 言語およびタイムゾーンを設定します。
      datestyle = 'iso, ymd'
      lc_messages = 'C'           # locale for system error message
      lc_monetary = 'C'           # locale for monetary formatting
      lc_numeric = 'C'            # locale for number formatting
      lc_time = 'C'               # locale for time formatting
      

      注釈

      timezoneについては利用する地域により変更して下さい。

  2. pg_hba.conf ファイルを編集して、外部からデータベースにアクセスできるように以下の設定を追加します。
    対象ファイル:
    • Windows

      • C:\Program Files\PostgreSQL\13\data\pg_hba.conf

    • Linux

      • /opt/postgres/data/pg_hba.conf

    host   all             all          0.0.0.0/0             md5
    host   all             all          ::/0                  md5
    
  3. Linuxの場合は ログの格納先を ログファイルを格納するためのフォルダ(/var/log/postgresql)を作成して、所属ユーザーおよびグループを postgres に変更します。

    警告

    Windowsの場合は本設定の変更は不要です。
    1. インストールするサーバーに管理者権限のアカウントでログインしたうえで、以下のコマンドを実行します。
      # mkdir -p /var/log/postgresql
      # chown postgres:postgres /var/log/postgresql
      

4.1.3. インストール確認

Windows

  1. PostgreSQLサービスを開始します。
    PS C:\> Start-Service -Name 'postgresql-x64-13'
    

    注釈

    Windows管理ツール[サービス]から開始することもできます。
    postgresql-x64-13 を右クリックし、コンテキストメニューの[開始]をクリックします。
  2. 以下のコマンドを実行してPostgreSQLが実行されていることを確認してください。
    PS C:\> Get-Service -Name 'postgresql-x64-13'
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  postgresql-x64-13  postgresql-x64-13
    

    注釈

    Windows管理ツール[サービス]から確認することもできます。
    postgresql-x64-13 の[状態]が 実行中 であることを確認します。

Linux

  1. 管理者ユーザーでpostgresをサービスとして起動します。
    # systemctl start postgresql-13
    
  2. 以下のコマンドを実行してPostgreSQLが実行されていることを確認してください。
    # systemctl status postgresql-13
    ● postgresql-13.service - PostgreSQL 13 database server
    Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2021-12-28 11:21:53 EST; 3s ago
        Docs: https://www.postgresql.org/docs/13/static/
    Process: 42771 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
    Main PID: 42777 (postmaster)
        Tasks: 8 (limit: 49336)
    Memory: 37.2M
    CGroup: /system.slice/postgresql-13.service
            ├─42777 /usr/pgsql-13/bin/postmaster -D /opt/postgres/data/
            ├─42778 postgres: logger
            ├─42780 postgres: checkpointer
            ├─42781 postgres: background writer
            ├─42782 postgres: walwriter
            ├─42783 postgres: autovacuum launcher
            ├─42784 postgres: stats collector
            └─42785 postgres: logical replication launcher
    
    Dec 28 11:21:52 localhost.localdomain systemd[1]: Starting PostgreSQL 13 database server...
    Dec 28 11:21:52 localhost.localdomain postmaster[42777]: 2021-12-28 11:21:52.962 EST [42777]: [1-1] db=,user=,app=,>
    Dec 28 11:21:52 localhost.localdomain postmaster[42777]: 2021-12-28 11:21:52.962 EST [42777]: [2-1] db=,user=,app=,>
    Dec 28 11:21:53 localhost.localdomain systemd[1]: Started PostgreSQL 13 database server.