Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

Amazon Linux 2 のpostgresqlをバージョンアップ (バージョン9 -> バージョン14)

updated on 2022-08-15

PostgreSQLのバージョン9から14へのアップデート


環境


Amazon Linux 2

PostgreSQL 9


経緯


Ruby On Rails 5.2 -> 6.1へバージョンアップした際に、psotgresqlのバージョンを9.3以上にしなさいというエラーメッセージと共にunicornが起動しない事象が起きた。

よって、postgresqlを最新かすることにした。


手順


STEP1: Amazon Linux 2へのEPELリポジトリの有効化


 EPEL YUM リポジトリに含まれていますが、Amazon Linux 2 ではデフォルトで有効になっていないため、手動でリポジトリを追加して有効にする必要があります。

Amazon Linux 2 に EPEL リポジトリをインストールするには、以下のコマンドを使用します。


$ sudo amazon-linux-extras install epel



STEP2: Amazon Linux 2にPostgreSQL 14をインストールする


次のコマンドを実行して、PGDGリポジトリがAmazon Linux 2サーバーに追加


- 64ビットCPUアーキテクチャのインスタンスの場合


sudo tee /etc/yum.repos.d/pgdg.repo<<EOF
[pgdg14]
name=PostgreSQL 14 for RHEL/CentOS 7 - x86_64
baseurl=http://download.postgresql.org/pub/repos/yum/14/redhat/rhel-7-x86_64
enabled=1
gpgcheck=0
EOF


- もしも、Graviton 2 (ARM64)のEC2インスタンスの場合はこちら


sudo tee /etc/yum.repos.d/pgdg.repo<<EOF
[pgdg14]
name=PostgreSQL 14 for RHEL/CentOS 7 - ARM64
baseurl=http://download.postgresql.org/pub/repos/yum/14/redhat/rhel-7-aarch64
enabled=1
gpgcheck=0
EOF


YUMパッケージインデックスの更新

$ sudo yum makecache



リポジトリを追加した後、Amazon Linux 2にPostgreSQL 14をインストールすることができます。

$ sudo yum install postgresql14 postgresql14-server



STEP3: Amazon Linux 2 上での PostgreSQL 14 の初期化


次に、postgresqlサービスを起動・有効化する前に、データベースの初期設定ファイルを生成します。


$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Initializing database ... OK


PostgreSQL 14サーバの主設定ファイルは、/var/lib/pgsql/14/data/postgresql.conf です。このファイルは、必要に応じて編集し、パラメータをカスタマイズすることができます。


次に、以下のコマンドを実行し、PostgreSQL 14 サービスを起動し、自動起動を有効にします。


$ sudo systemctl enable --now postgresql-14
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-14.service to /usr/lib/systemd/system/postgresql-14.service.


起動したかどうかのステータス確認


$ systemctl status postgresql-14
● postgresql-14.service - PostgreSQL 14 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-28 10:11:57 UTC; 48s ago
     Docs: https://www.postgresql.org/docs/14/static/
  Process: 3075 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
  Main PID: 3080 (postmaster)
   CGroup: /system.slice/postgresql-14.service
    ├─3080 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
    ├─3083 postgres: logger
    ├─3085 postgres: checkpointer
    ├─3086 postgres: background writer
    ├─3087 postgres: walwriter
    ├─3088 postgres: autovacuum launcher
    ├─3089 postgres: stats collector
    └─3090 postgres: logical replication launcher



STEP4:PostgreSQL 14のターミナルコンソールにアクセス


# postgres でログインする。
su - postgres

# シェルの設定ファイルを開く
vi ~/.bash_profile


[ -f /etc/profile ] && source /etc/profile
PGDATA=/var/lib/pgsql/14/data
export PGDATA
# ここ一行追加
export PATH=/usr/pgsql-14/bin/:$PATH
# If you want to customize your settings,
# Use the file below. This is not overridden
# by the RPMS.
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile


source ~/.bash_profile


$ sudo su - postgres 
-bash-4.2$ psql -h localhost
psql (14.5)
Type "help" for help.


試しにデータベースを作ってみる

postgres=# CREATE DATABASE testdb;
CREATE DATABASE

postgres=# DROP DATABASE testdb;
DROP DATABASE



STEP5: PostgreSQLサービスのListen Addressを変更する。


デフォルトでは、サービスはlocalhostループバックインターフェースアドレスをリッスンします。


$ sudo ss -tunelp | grep 5432

tcp  LISTEN 0      128                            127.0.0.1:5432        0.0.0.0:*          users:(("postmaster",pid=3080,fd=7)) uid:26 ino:25799 sk:b <->
tcp  LISTEN 0      128                                [::1]:5432           [::]:*          users:(("postmaster",pid=3080,fd=6)) uid:26 ino:25798 sk:f v6only:1 <->



$ grep listen_addresses /var/lib/pgsql/14/data/postgresql.conf\r\n#listen_addresses = 'localhost'        # what IP address(es) to listen on;


$ sudo vim /var/lib/pgsql/14/data/postgresql.conf\r\nlisten_addresses = '172.21.100.15'


リモート接続のための認証方法の更新が必要な場合があります。


$ sudo vim /var/lib/pgsql/14/data/pg_hba.conf


# local   all             all                                    peer
# 以下に変更(peer認証を取り除く)
local   all             all                                    md5


設定の反映

$ sudo systemctl restart postgresql-14


$ sudo ss -tunelp | grep 5432

tcp  LISTEN 0      128                       172.21.100.15:5432        0.0.0.0:*          users:(("postmaster",pid=820,fd=6)) uid:26 ino:84686 sk:10 <->