PostgreSQL更新後にポートがデフォルトに

CentOS7にyumで入れていたPostgreSQLについて、更新したところ、ポートがデフォルトに戻ってしまった。

サービス起動ファイルが更新されてしまったため、再度、修正した。

# systemctl stop postgresql
# systemctl disable postgresql 
# vi /usr/lib/systemd/system/postgresql.service  ※Environment=PGPORT=5432 を変更して、サービス再登録
# systemctl enable postgresql 
# systemctl start postgresql 
# systemctl status postgresql  ※ポート変更されていることを確認

しかし、そもそも起動ファイルが、何で定義ファイルを無視するようになってるんだ・・・。

CentOS7に最新のPostgreSQL

テスト環境のCentOS7に入れてあるPostgreSQLが古いので、バージョンアップして最新に。その時の、作業メモ。

1.インストール

yumのままだとPostgreSQL9.2になっているので、最新をRPMから入れる。

(PostgreSQL公式)PostgreSQL: Linux downloads (Red Hat family)

このページで、1.バージョン、2.プラットフォーム、3.アーキテクチャーを選べば、4に必要なコマンドが出てくるので、それを実行。

$ yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ yum install -y postgresql13-server
$ /usr/pgsql-13/bin/postgresql-13-setup initdb
$ systemctl enable postgresql-13
$ systemctl start postgresql-13

事前に、前のバージョンは、停止して、自動起動も止める。

$ systemctl stop postgresql
$ systemctl disable postgresql

環境設定等は、以下が参考になる。

(Qiita)PostgreSQL スーパーユーザの環境変数設定

2.DB復元

バックアップファイルから、DBを復元する。

1)postgresユーザーになって、psqlコマンドを起動し、データベースとロールを作成。

$ su - postgres
$ psql
psql (13.1)
Type "help" for help.
postgres=# CREATE DATABASE xxxxxx;
CREATE DATABASE
postgres=# CREATE ROLE xxxxxx SUPERUSER LOGIN PASSWORD 'xxxxx';
CREATE ROLE
postgres=# \q

2)DBの復元

$ pg_restore -d xxxxx バックアップファイル

3.接続設定

新しいバージョンの定義ファイルを修正して、従来と同じ方法で接続できるようにする。

(定義ファイルの場所)

/var/lib/pgsql/13/data/

開発環境からの接続を許可するように、以下ファイルを修正。

$ diff pg_hba.conf.org pg_hba.conf
86a87
host all all 111.111.111.111/32 scram-sha-256    ※111.111.111.111:開発環境のIPアドレス

$ diff postgresql.conf.org postgresql.conf
62a63
listen_addresses = '*'

ファイアウォールでPostgreSQLのポートが閉じられているなら、開く。

4.ポート変更する場合

セキュリティー上、あるいは複数バージョンを同時に立ち上げる等でポート変更する場合。

1)設定ファイルのポートを変更して再起動

# diff postgresql.conf.org postgresql.conf
64c64
< #port = 5432                          # (change requires restart)
---
> port = 9999                           # (change requires restart) 

# systemctl restart postgresql-13

2)ファイアウォールのPostgreSQLのポートを変更、または追加

両方のバージョンを並行運用することも考えて、13は別サービスとして登録。

サービス定義ファイルの場所に移動して、サービス定義ファイルをコピーして、ポートを修正する。

# cd /usr/lib/firewalld/services
# cp postgresql.xml postgresql-13.xml
# vi postgresql-13.xml   ※portの設定を変更
# firewall-cmd --permanent --add-service=postgresql-13
# firewall-cmd --reload
# firewall-cmd --list-all ※確認

※ちなみに、yumで入れたPostgreSQL9.2もポート番号を変えたい場合、サービス起動ファイルに、ポートが書かれているのでこちらを変更する必要がある。

# vi /usr/lib/systemd/system/postgresql.service
    ※Environment=PGPORT=5432 を変更して、サービス再登録
# systemctl stop postgresql
# systemctl disable postgresql
# systemctl enable postgresql
# systemctl start postgresql
# systemctl status postgresql  ※ポート変更されていることを確認