4. PostgreSQLの導入¶
この章では、Senju/QA DBサーバーとしてのPostgreSQLをインストールするための手順について説明します。
4.1. PostgreSQLのインストール¶
4.1.1. インストールの流れ¶
Windows
- インストール用のexeファイルを入手し、インストールするサーバーの任意のフォルダに格納します。
- ダウンロードURL:対象ファイル:
postgresql-13.5-1-windows-x64.exe
インストールするサーバーに管理者権限のアカウントでログインします。
exeファイルを右クリックし、コンテキストメニューから[管理者として実行]をクリックします。
- [Setup - PostgreSQL]画面が表示されるため、以下の操作を行います。
[Next >]ボタンをクリックします。
- [Installation Directory]画面が表示されるため、以下の操作を行います。
インストール先のフォルダを指定します。
[Next >]ボタンをクリックします。
- [Select Components]画面が表示されるため、以下の操作を行います。
Stack Builder
のチェックを外します。[Next >]ボタンをクリックします。
- [Data Directory]画面が表示されるため、以下の操作を行います。
データ格納先フォルダを指定します。
[Next >]ボタンをクリックします。
- [Password]画面が表示されるため、以下の操作を行います。
Password
およびRetype password
にパスワードを入力します。[Next >]ボタンをクリックします。
- [Port]画面が表示されるため、以下の操作を行います。
ポート番号を入力します。
[Next >]ボタンをクリックします。
- [Advanced Options]画面が表示されるため、以下の操作を行います。
[Default locale]
を選択します。[Next >]ボタンをクリックします。
- [Pre Installation Summary]画面が表示されるため、以下の操作を行います。
設定情報を確認します。
[Next >]ボタンをクリックします。
- [Ready to Install]画面が表示されるため、以下の操作を行います。
[Next >]ボタンをクリックします。
- [Installing]画面が表示されるため、以下の操作を行います。
インストール完了まで操作しないでください。
- [Completing the PostgreSQL Setup Wizard]画面が表示されるため、以下の操作を行います。
[Finish]ボタンをクリックします。
- PATH環境変数にPostgreSQLのbinフォルダを登録します。
注釈
コマンドラインからPostgreSQLのコマンドを実行するための設定です。
[スタート]ボタンを右クリックし、コンテキストメニューの[ファイル名を指定して実行(R)]をクリックします。
- [ファイル名を指定して実行] ダイアログが表示されるため、以下の操作を行います。
[名前(O):] に sysdm.cpl と入力します。
[OK] ボタンをクリックします。
- [システムのプロパティ] ダイアログが表示されるため、以下の操作を行います。
[詳細設定] タブをクリックします。
[環境変数(N)...] ボタンをクリックします。
- [環境変数] ダイアログが表示されるため、以下の操作を行います。
[システム環境変数(S)] の [変数] Path を選択します。
[編集(I)...] ボタンをクリックします。
- [環境変数名の編集] ダイアログが表示されるため、以下の操作を行います。
[新規(N)] ボタンをクリックします。
C:\Program Files\PostgreSQL\13\bin
と入力します。[OK] ボタンをクリックします。
Linux
注釈
本手順によりpostgresユーザーが作成されますが、サーバーにpostgresユーザーが存在しないことを確認して下さい。 もし、postgresユーザーが存在する場合は、利用されていないことを確認しpostgresユーザーを削除して下さい。
- インストール用の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/
配下に格納した場合の手順を例として説明します。ほかのディレクトリに格納した場合は適宜各コマンドで指定するパスを変更してください。)
インストールするサーバーに管理者権限のアカウントでログインします。
- 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
- 今後の円滑なアップデートが可能なようにシンボリックリンクを設定します。
# ln -s /usr/pgsql-13 /usr/local/pgsql
- データベースクラスタ用のディレクトリを作成します。
# mkdir -p /opt/postgres/data # chown postgres:postgres /opt/postgres/data
- 自動起動時の起動設定を編集します。
/usr/lib/systemd/system/postgresql-13.service
のEnvironment=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/
- PostgreSQLサービスを有効化します。
# systemctl enable postgresql-13
- データベースクラスタを作成します。
# su - postgres -c '/usr/local/pgsql/bin/initdb --no-locale --encoding=UTF8 -D /opt/postgres/data'
4.1.2. PostgreSQLの設定¶
postgresql.conf
ファイルを編集して設定を変更します。- 対象ファイル:
Windows
C:\Program Files\PostgreSQL\13\data\postgresql.conf
Linux
/opt/postgres/data/postgresql.conf
- アプリケーションサーバーとDBサーバーを分ける場合、listen_addressesを変更して外部からアクセスできるようにします。
listen_addresses = '*' # what IP address(es) to listen on;
- PostgreSQLのポート番号を 5432 に変更します。
port = 5432 # (change requires restart)
- 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;
- PostgreSQLのシェーアードバッファの設定を 512MB に変更します。
shared_buffers = 512MB # min 128kB
- PostgreSQLのログ先行書き込みの設定を max_wal_size = 2GB , min_wal_size = 1GB に変更します。
max_wal_size = 2GB min_wal_size = 1GB
Linuxの場合は ログの格納先を
/var/log/postgresql
に変更します。警告
Windowsの場合は本設定の変更は不要です。log_directory = '/var/log/postgresql'
- ログの世代管理を行えるようにログファイルフォーマットとシフト方法を変更します。
log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 0
- 監視運用のためログファイルのパーミッションを 0644 変更します。
log_file_mode = 0644
- ログ出力タイミングを変更し問題を検知しやすくします。
log_min_error_statement = warning log_min_duration_statement = 1s
- ログ出力内容を変更し問題を検知しやすくします。
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
- PostgreSQLのバキューム処理のログ出力設定を変更し問題を検知しやすくします。
log_autovacuum_min_duration = 1s
- 言語およびタイムゾーンを設定します。
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については利用する地域により変更して下さい。
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
Linuxの場合は ログの格納先を ログファイルを格納するためのフォルダ(
/var/log/postgresql
)を作成して、所属ユーザーおよびグループをpostgres
に変更します。警告
Windowsの場合は本設定の変更は不要です。- インストールするサーバーに管理者権限のアカウントでログインしたうえで、以下のコマンドを実行します。
# mkdir -p /var/log/postgresql # chown postgres:postgres /var/log/postgresql
4.1.3. インストール確認¶
Windows
- PostgreSQLサービスを開始します。
PS C:\> Start-Service -Name 'postgresql-x64-13'
注釈
Windows管理ツール[サービス]から開始することもできます。postgresql-x64-13
を右クリックし、コンテキストメニューの[開始]をクリックします。
- 以下のコマンドを実行してPostgreSQLが実行されていることを確認してください。
PS C:\> Get-Service -Name 'postgresql-x64-13' Status Name DisplayName ------ ---- ----------- Running postgresql-x64-13 postgresql-x64-13
注釈
Windows管理ツール[サービス]から確認することもできます。postgresql-x64-13
の[状態]が実行中
であることを確認します。
Linux
- 管理者ユーザーでpostgresをサービスとして起動します。
# systemctl start postgresql-13
- 以下のコマンドを実行して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.