2019-12-11

[CentOS 8] PostgreSQL のインストール

オープンソースのオブジェクト関係データベース管理システム (ORDBMS) である PostgreSQL は、CentOS の配布パッケージで利用できますが、PostgreSQL の開発サイトでも CentOS を含む Red Hat 系 Linux 向けに yum のリポジトリを公開しています [1]

備忘録として、CentOS 8 に PostgreSQL のサイトが公開しているリポジトリを設定、最新の PostgreSQL をインストールする手順をまとめました。

OS
CentOS Linux release 8.0.1905 (Core) x86_64

OUTLINE


PostgreSQL のインストール

CentOS に PostgreSQL のサイトのリポジトリを設定する手順は、参考サイト [2] に従って進めます。

Modularity

2018 年 5 月 1 日にリリースされた Fedora 28 に Modularity という概念が導入され、アプリケーションのライフサイクルを設定するための新しい仕組みが追加されました [3]。この仕組みは、その後にリリースされた Fedora や RHEL 8 / CentOS 8 に引き継がれています。BaseOS がベースリポジトリ、AppStream がいくつかのアプリケーションを Module として提供するリポジトリになります。

[bitwalk@centos-pc ~]$ sudo dnf list postgresql
[sudo] bitwalk のパスワード:
メタデータの期限切れの最終確認: 2:20:44 時間前の 2019年12月10日 04時44分59秒 に実施しました。
利用可能なパッケージ
postgresql.x86_64          10.6-1.module_el8.0.0+15+f57f353b           AppStream
[bitwalk@centos-pc ~]$ 

PostgreSQL の Module 一覧を表示すると以下のようになります。

[bitwalk@centos-pc ~]$ sudo dnf module list postgresql
メタデータの期限切れの最終確認: 2:20:59 時間前の 2019年12月10日 04時44分59秒 に実施しました。
CentOS-8 - AppStream
Name         Stream   Profiles             Summary                              
postgresql   10 [d]   client, server [d]   PostgreSQL server and client module  
postgresql   9.6      client, server [d]   PostgreSQL server and client module  

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[bitwalk@centos-pc ~]$ 

PostgreSQL モジュールの無効化

今回は CentOS が配布している PostgreSQL パッケージではなく、PostgreSQL の開発サイトが公開しているリポジトリを利用して最新の PostgreSQL をインストールしますので、CentOS の PostgreSQL モジュールを無効にしておきます。

[bitwalk@centos-pc ~]$ sudo dnf module disable postgresql
メタデータの期限切れの最終確認: 0:00:43 時間前の 2019年12月10日 10時45分49秒 に実施しました。
依存関係が解決しました。
================================================================================
 パッケージ        アーキテクチャー バージョン          リポジトリ        サイズ
================================================================================
Disabling module streams:
 postgresql                                                                    

トランザクションの概要
================================================================================

これでよろしいですか? [y/N]: y
完了しました!
[bitwalk@centos-pc ~]$ 

PostgreSQL の Yum リポジトリをインストール

参考サイト [4] から PostgreSQL の開発サイトが公開している yum リポジトリを設定するための rpm パッケージをダウンロードします。ここでは PostgreSQL 12 をインストールするため [12] をクリックします(下記)。

※ 現在のリポジトリファイルには、アクティブなバージョンの PostgreSQL リポジトリ情報が全て記載されているため、どのバージョンを選んでも大丈夫です。

すると Linux ディストロ毎にダウンロードするサイトが表示されます(下図)。ここでは RHEL/CentOS/ 'CentOS 8 - x86_64' をクリックして pgdg-redhat-repo-latest.noarch.rpm をダウンロードします。

ダウンロードした pgdg-redhat-repo-latest.noarch.rpm をインストールします。

[bitwalk@centos-pc ダウンロード]$ sudo dnf install pgdg-redhat-repo-latest.noarch.rpm
[sudo] bitwalk のパスワード:
CentOS-8 - AppStream                            1.0 kB/s | 4.3 kB     00:04    
CentOS-8 - Base                                 2.8 kB/s | 3.9 kB     00:01    
...
(省略)
...
依存関係が解決しました。
================================================================================
 パッケージ              アーキテクチャー
                                       バージョン     リポジトリ          サイズ
================================================================================
Installing:
 pgdg-redhat-repo        noarch        42.0-5         @commandline         10 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

合計サイズ: 10 k
インストール済みのサイズ: 7.5 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード中です:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  Installing       : pgdg-redhat-repo-42.0-5.noarch                         1/1 
  検証             : pgdg-redhat-repo-42.0-5.noarch                         1/1 

インストール済み:
  pgdg-redhat-repo-42.0-5.noarch                                                

完了しました!
[bitwalk@centos-pc ダウンロード]$ 

リポジトリファイルの編集

インストールしたリポジトリファイルに一行追加します。

[bitwalk@centos-pc ~]$ ls /etc/yum.repos.d
CentOS-AppStream.repo  CentOS-PowerTools.repo  epel-testing.repo
CentOS-Base.repo       CentOS-Sources.repo     epel.repo
CentOS-CR.repo         CentOS-Vault.repo       nginx.repo
CentOS-Debuginfo.repo  CentOS-centosplus.repo  pgdg-redhat-all.repo
CentOS-Extras.repo     CentOS-fasttrack.repo
CentOS-Media.repo      epel-playground.repo
[bitwalk@centos-pc ~]$ sudo vi /etc/yum.repos.d/pgdg-redhat-all.repo

下記、赤字の行を追加して保存します。なお、既に該当する行がある場合には編集の必要はありません。

# PGDG Red Hat Enterprise Linux / CentOS stable repositories:

[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
module_hotfixes=true
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

[pgdg11]
name=PostgreSQL 11 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
...
(以下省略)

PostgreSQL のインストール

PostgreSQL の開発サイトで公開している PostgreSQL のパッケージは、CentOS のモジュールと異なり、複数のバージョンを同じシステムにインストールできるようにするため、パッケージ名の命名ルールが異なります。そこでまず、インストール可能なパッケージ名を確認します。

[bitwalk@centos-pc ~]$ dnf list postgresql*-server
PostgreSQL 10 for RHEL/CentOS 8 - x86_64        138 kB/s | 647 kB     00:04    
PostgreSQL 11 for RHEL/CentOS 8 - x86_64        145 kB/s | 758 kB     00:05    
PostgreSQL 12 for RHEL/CentOS 8 - x86_64        111 kB/s | 620 kB     00:05    
PostgreSQL 9.4 for RHEL/CentOS 8 - x86_64        85 kB/s | 415 kB     00:04    
PostgreSQL 9.5 for RHEL/CentOS 8 - x86_64       124 kB/s | 523 kB     00:04    
PostgreSQL 9.6 for RHEL/CentOS 8 - x86_64       107 kB/s | 620 kB     00:05    
メタデータの期限切れの最終確認: 0:00:38 時間前の 2019年12月10日 15時36分23秒 に実施しました。
利用可能なパッケージ
postgresql10-server.x86_64               10.11-2PGDG.rhel8                pgdg10
postgresql11-server.x86_64               11.6-2PGDG.rhel8                 pgdg11
postgresql12-server.x86_64               12.1-2PGDG.rhel8                 pgdg12
postgresql94-server.x86_64               9.4.25-1PGDG.rhel8               pgdg12
postgresql94-server.x86_64               9.4.25-1PGDG.rhel8               pgdg94
postgresql95-server.x86_64               9.5.20-2PGDG.rhel8               pgdg95
postgresql96-server.x86_64               9.6.16-2PGDG.rhel8               pgdg96
[bitwalk@centos-pc ~]$ 

最新の postgresql12-server.x86_64 をインストールすることにします。

[bitwalk@centos-pc ~]$ sudo dnf install postgresql12-server
...
(途中省略)
...
PostgreSQL 11 for RHEL/CentOS 8 - x86_64        2.2 kB/s | 3.8 kB     00:01    
PostgreSQL 12 for RHEL/CentOS 8 - x86_64        1.7 kB/s | 3.8 kB     00:02    
PostgreSQL 9.4 for RHEL/CentOS 8 - x86_64       2.2 kB/s | 3.8 kB     00:01    
PostgreSQL 9.5 for RHEL/CentOS 8 - x86_64       2.2 kB/s | 3.8 kB     00:01    
PostgreSQL 9.6 for RHEL/CentOS 8 - x86_64       2.2 kB/s | 3.8 kB     00:01    
依存関係が解決しました。
================================================================================
 パッケージ               アーキテクチャー
                                      バージョン              リポジトリ  サイズ
================================================================================
Installing:
 postgresql12-server      x86_64      12.1-2PGDG.rhel8        pgdg12       16 M
依存関係をインストール中:
 postgresql12             x86_64      12.1-2PGDG.rhel8        pgdg12      3.1 M
 postgresql12-libs        x86_64      12.1-2PGDG.rhel8        pgdg12      854 k

トランザクションの概要
================================================================================
インストール  3 パッケージ

ダウンロードサイズの合計: 19 M
インストール済みのサイズ: 86 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード中です:
(1/3): postgresql12-libs-12.1-2PGDG.rhel8.x86_6 270 kB/s | 854 kB     00:03    
(2/3): postgresql12-12.1-2PGDG.rhel8.x86_64.rpm 863 kB/s | 3.1 MB     00:03    
(3/3): postgresql12-server-12.1-2PGDG.rhel8.x86 2.4 MB/s |  16 MB     00:06    
--------------------------------------------------------------------------------
合計                                            3.0 MB/s |  19 MB     00:06     
警告: /var/cache/dnf/pgdg12-64e2194e85277659/packages/postgresql12-12.1-2PGDG.rhel8.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY
PostgreSQL 12 for RHEL/CentOS 8 - x86_64        1.6 MB/s | 1.7 kB     00:00    
GPG 鍵 0x442DF0F8 をインポート中:
 Userid     : "PostgreSQL RPM Building Project "
 Fingerprint: 68C9 E2B9 1A37 D136 FE74 D176 1F16 D2E1 442D F0F8
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションの確認を実行中
...
(途中省略)
...
  検証             : postgresql12-server-12.1-2PGDG.rhel8.x86_64            3/3 

インストール済み:
  postgresql12-server-12.1-2PGDG.rhel8.x86_64                                   
  postgresql12-12.1-2PGDG.rhel8.x86_64                                          
  postgresql12-libs-12.1-2PGDG.rhel8.x86_64                                     

完了しました!
[bitwalk@centos-pc ~]$ 

PostgreSQL の起動と動作確認

PostgreSQL の詳細な設定はさておき、簡単な設定をして動作確認をしておきます。

データベースクラスタの作成

次のようにして、ディスク上にデータベース格納領域(データベースクラスタ)を初期化します。

[bitwalk@centos-pc ~]$ sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
[sudo] bitwalk のパスワード:
Initializing database ... OK

[bitwalk@centos-pc ~]$ 

サービスの起動

データベース格納領域(データベースクラスタ)の初期化後、PostgreSQL のサービスが起動 (start) することを確認します。ついでに自動起動 (enable) の設定もしておきます。

[bitwalk@centos-pc ~]$ sudo systemctl list-unit-files | grep postgresql
postgresql-12.service                       disabled 
[bitwalk@centos-pc ~]$ sudo systemctl start postgresql-12
[bitwalk@centos-pc ~]$ sudo systemctl enable postgresql-12
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql-12.service → /usr/lib/systemd/system/postgresql-12.service.
[bitwalk@centos-pc ~]$ sudo systemctl status postgresql-12
 postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; enabled; vend>
   Active: active (running) since Tue 2019-12-10 16:20:02 JST; 20s ago
     Docs: https://www.postgresql.org/docs/12/static/
 Main PID: 27068 (postmaster)
    Tasks: 8 (limit: 26213)
   Memory: 17.9M
   CGroup: /system.slice/postgresql-12.service
           ├─27068 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
           ├─27069 postgres: logger   
           ├─27071 postgres: checkpointer   
           ├─27072 postgres: background writer   
           ├─27073 postgres: walwriter   
           ├─27074 postgres: autovacuum launcher   
           ├─27075 postgres: stats collector   
           └─27076 postgres: logical replication launcher   

12月 10 16:20:02 centos-pc systemd[1]: Starting PostgreSQL 12 database server...
12月 10 16:20:02 centos-pc postmaster[27068]: 2019-12-10 16:20:02.575 JST [2706>
12月 10 16:20:02 centos-pc postmaster[27068]: 2019-12-10 16:20:02.579 JST [2706>
12月 10 16:20:02 centos-pc postmaster[27068]: 2019-12-10 16:20:02.579 JST [2706>
12月 10 16:20:02 centos-pc postmaster[27068]: 2019-12-10 16:20:02.582 JST [2706>
12月 10 16:20:02 centos-pc postmaster[27068]: 2019-12-10 16:20:02.589 JST [2706>
[bitwalk@centos-pc ~]$ 

postgresql.conf と pg_hba.conf の設定

データベースクラスターは /var/lib/pgsql/12/data に作成されています。

[bitwalk@centos-pc ~]$ sudo ls /var/lib/pgsql/12/data
PG_VERSION    pg_dynshmem    pg_notify    pg_stat_tmp pg_xact
base       pg_hba.conf    pg_replslot   pg_subtrans postgresql.auto.conf
global       pg_ident.conf  pg_serial    pg_tblspc postgresql.conf
log       pg_logical     pg_snapshots  pg_twophase
pg_commit_ts  pg_multixact   pg_stat    pg_wal
[bitwalk@centos-pc ~]$ 

ルート権限で、postgresql.conf と pg_hba.conf を下記のように編集しました。

postgresql.conf(変更部分)
...
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
listen_addresses = '*'
                                        # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)
...
pg_hba.conf(変更部分)
...
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             192.168.0.1/24          md5
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

編集後、サービスを再起動します。

[bitwalk@centos-pc ~]$ sudo systemctl restart postgresql-12

postgres ユーザーのパスワード設定

PostgreSQL のインストール時に作成された postgres アカウント(ユーザー)にパスワードを設定します。

[bitwalk@centos-pc ~]$ sudo passwd postgres
[sudo] bitwalk のパスワード:
ユーザー postgres のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[bitwalk@centos-pc ~]$ 

postgres アカウント(ユーザー)に切り替えます。

[bitwalk@centos-pc ~]$ sudo su - postgres
[postgres@centos-pc ~]$ 

psqlコマンドを実行して、PostgreSQL が管理するユーザーの postgres に対してもパスワードを設定します。

[postgres@centos-pc ~]$ psql
psql (12.1)
"help"でヘルプを表示します。

postgres=# alter role postgres with password 'postgres';
ALTER ROLE
postgres-# \q
[postgres@centos-pc ~]$ 

ファイアウォールの設定

下記のようにファイアウォールを設定しました。

[bitwalk@centos-pc ~]$ sudo firewall-cmd --add-service=postgresql --permanent
[sudo] bitwalk のパスワード:
success
[bitwalk@centos-pc ~]$ sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
success
[bitwalk@centos-pc ~]$ sudo firewall-cmd --reload
success
[bitwalk@centos-pc ~]$ 

pgAdmin でアクセス

データベースのメンテナンス用に pgAdmin4 を LAN 内の Windows PC にインストールしてアクセスしてみました。

pgAdmin4 でデータベースにアクセスした例

今のところ、SELinux からエラー出ていませんが、データベースの操作をしたときに出るかもしれません。とりあえず、エラーが出たときに対処していきます。

参考サイト

  1. PostgreSQL: Linux downloads (Red Hat family)
  2. Installing PostgreSQL on RHEL 8 | Devrim Gunduz's PostgreSQL Blog [2019-07-25]
  3. RHEL 8/Fedora 28で導入されたModularity - 赤帽エンジニアブログ [2018-12-14]
  4. PostgreSQL RPM Repository (with Yum)

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: