Amazon Linux2 から pg_dump で RDS for PostgreSQL のダンプ作成時にハマったので調べてみた

PostgreSQLエンジンのバージョンを考慮したパッケージ追加が必要となります!
2021.12.08

こんにちは!コンサル部のinomaso(@inomasosan)です。

Amazon Linux2からpg_dumpを使用してRDS for PostgreSQLのダンプ作成時に、pg_dumpのバージョンエラーとなってしまったので、解決策を検証してみました。

検証環境

項目 バージョン
Amazon Linux2 amzn2-ami-kernel-5.10-hvm-2.0.20211201.0-x86_64-gp2
pg_dump 9.2.24
PostgreSQL 13.4

エラー事象

Amazon Linux2の標準リポジトリでpg_dumpを含むpostgresql.x86_64インストールし、RDS for PostgreSQLのダンプ作成時に以下のようなエラーメッセージが出力されました。

pg_dump: サーババージョン: 13.4、pg_dump バージョン: 9.2.24
pg_dump: サーババージョンの不整合のため処理を中断しています

原因

pg_dumpとRDS for PostgreSQLのバージョンが大きく異なっていたために発生したエラーでした。 解決するためには、基本的にpg_dumpが含まれるPostgreSQLクライアント側をバージョンアップする必要があります。

PostgreSQLクライアントのバージョンアップ

前提

今回は検証ではバージョン依存を考慮する必要がない前提とし、yumでpostgresql13.x86_64をインストールしていきます。
既存環境に影響を与えたくない場合は、以下のブログが参考になるかと思います。

PostgreSQLクライアントの古いパッケージ削除

古いpostgresqlパッケージをインストール済みの場合は削除します。

$ sudo yum -y remove postgresql.x86_64
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ postgresql.x86_64 0:9.2.24-6.amzn2 を 削除
--> 依存性解決を終了しました。
amzn2-core/2/x86_64                                                          | 3.7 kB  00:00:00

依存性を解決しました

====================================================================================================
 Package                アーキテクチャー   バージョン                 リポジトリー             容量
====================================================================================================
削除中:
 postgresql             x86_64             9.2.24-6.amzn2             @amzn2-core              16 M

トランザクションの要約
====================================================================================================
削除  1 パッケージ

インストール容量: 16 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : postgresql-9.2.24-6.amzn2.x86_64                                    1/1
  検証中                  : postgresql-9.2.24-6.amzn2.x86_64                                    1/1

削除しました:
  postgresql.x86_64 0:9.2.24-6.amzn2

完了しました!

リポジトリ追加

PGDGリポジトリ(PostgreSQL開発元のYumリポジトリ)は、一部のパッケージがExtra Packages for Enterprise Linux (EPEL)に依存しているため、EPELリポジトリと一緒に有効化します。

EPELリポジトリ有効化

Amazon Linux2の場合Amazon Linux Extrasを利用することで、簡単にEPELリポジトリを利用できるようになります。

$ sudo amazon-linux-extras install -y epel
Installing epel-release
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
リポジトリーを清掃しています: amzn2-core amzn2extra-docker amzn2extra-epel amzn2extra-kernel-5.10
17 個の metadata ファイルを削除しました
6 個の sqlite ファイルを削除しました
0 個の metadata ファイルを削除しました
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                   | 3.7 kB  00:00:00
amzn2extra-docker                                                            | 3.0 kB  00:00:00
amzn2extra-epel                                                              | 3.0 kB  00:00:00
amzn2extra-kernel-5.10                                                       | 3.0 kB  00:00:00
(1/9): amzn2-core/2/x86_64/group_gz                                          | 2.5 kB  00:00:00
(2/9): amzn2-core/2/x86_64/updateinfo                                        | 424 kB  00:00:00
(3/9): amzn2extra-epel/2/x86_64/primary_db                                   | 1.8 kB  00:00:00
(4/9): amzn2extra-kernel-5.10/2/x86_64/updateinfo                            |   76 B  00:00:00
(5/9): amzn2extra-docker/2/x86_64/updateinfo                                 | 4.7 kB  00:00:00
(6/9): amzn2extra-epel/2/x86_64/updateinfo                                   |   76 B  00:00:00
(7/9): amzn2extra-docker/2/x86_64/primary_db                                 |  86 kB  00:00:00
(8/9): amzn2extra-kernel-5.10/2/x86_64/primary_db                            | 5.3 MB  00:00:00
(9/9): amzn2-core/2/x86_64/primary_db                                        |  58 MB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package                   アーキテクチャー    バージョン        リポジトリー                  容量
====================================================================================================
インストール中:
 epel-release              noarch              7-11              amzn2extra-epel               15 k

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

総ダウンロード容量: 15 k
インストール容量: 24 k
Downloading packages:
epel-release-7-11.noarch.rpm                                                 |  15 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : epel-release-7-11.noarch                                            1/1
  検証中                  : epel-release-7-11.noarch                                            1/1

インストール:
  epel-release.noarch 0:7-11

完了しました!
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql9.6            available    \
        [ =9.6.6  =9.6.8  =stable ]
  6  postgresql10             available    [ =10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
          =stable ]
 11  vim                      available    [ =8.0  =stable ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24  =7.2.26  =stable ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14  =10.2.10_7.2.16  =10.2.10_7.2.17
          =10.2.10_7.2.19  =10.2.10_7.2.22  =10.2.10_7.2.23
          =10.2.10_7.2.24  =stable ]
 18  libreoffice              available    \
        [ =5.0.6.2_15  =5.3.6.1  =stable ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
 21  mate-desktop1.x          available    \
        [ =1.19.0  =1.20.0  =stable ]
 22  GraphicsMagick1.3        available    \
        [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50
          =stable ]
 24  epel=latest              enabled      [ =7.11  =stable ]
 25  testing                  available    [ =1.0  =stable ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    \
        [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
          =1.8.0_242  =stable ]
 28  firecracker              available    [ =0.11  =stable ]
 29  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 30  squid4                   available    [ =4  =stable ]
 31  php7.3                   available    \
        [ =7.3.2  =7.3.3  =7.3.4  =7.3.6  =7.3.8  =7.3.9  =7.3.10
          =7.3.11  =7.3.13  =stable ]
 32  lustre2.10               available    \
        [ =2.10.5  =2.10.8  =stable ]
 33  java-openjdk11           available    [ =11  =stable ]
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1                   available    [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11  =stable ]
 42  php7.4                   available    [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
 46  collectd                 available    [ =stable ]
 47  aws-nitro-enclaves-cli   available    [ =stable ]
 48  R4                       available    [ =stable ]
  _  kernel-5.4               available    [ =stable ]
 50  selinux-ng               available    [ =stable ]
 51  php8.0                   available    [ =stable ]
 52  tomcat9                  available    [ =stable ]
 53  unbound1.13              available    [ =stable ]
 54  mariadb10.5              available    [ =stable ]
 55  kernel-5.10=latest       enabled      [ =stable ]
 56  redis6                   available    [ =stable ]
 57  ruby3.0                  available    [ =stable ]
 58  postgresql12             available    [ =stable ]
 59  postgresql13             available    [ =stable ]
 60  mock2                    available    [ =stable ]
 61  dnsmasq2.85              available    [ =stable ]

PGDGリポジトリ有効化

PostgreSQL13用のリポジトリを有効化します。

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

PostgreSQL13用クライアントをインストール

PostgreSQL13のパッケージをインストールできるか確認します。

$ sudo yum search postgresql13
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
210 packages excluded due to repository priority protections
==================================== N/S matched: postgresql13 =====================================
postgresql13.x86_64 : PostgreSQL client programs and libraries
postgresql13-contrib.x86_64 : Contributed source and binaries distributed with PostgreSQL
postgresql13-devel.x86_64 : PostgreSQL development header files and libraries
postgresql13-docs.x86_64 : Extra documentation for PostgreSQL
postgresql13-libs.x86_64 : The shared libraries required for any PostgreSQL clients
postgresql13-llvmjit.x86_64 : Just-in-time compilation support for PostgreSQL
postgresql13-odbc.x86_64 : PostgreSQL ODBC driver
postgresql13-plperl.x86_64 : The Perl procedural language for PostgreSQL
postgresql13-plpython3.x86_64 : The Python3 procedural language for PostgreSQL
postgresql13-pltcl.x86_64 : The Tcl procedural language for PostgreSQL
postgresql13-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql13-test.x86_64 : The test suite distributed with PostgreSQL

  Name and summary matches only, use "search all" for everything.

PostgreSQL13のクライアント用パッケージをインストールします。

$ sudo yum -y install postgresql13.x86_64
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                   | 3.7 kB  00:00:00
210 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ postgresql13.x86_64 0:13.5-1PGDG.rhel7 を インストール
--> 依存性の処理をしています: postgresql13-libs(x86-64) = 13.5-1PGDG.rhel7 のパッケージ: postgresql13-13.5-1PGDG.rhel7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ postgresql13-libs.x86_64 0:13.5-1PGDG.rhel7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package                      アーキテクチャー  バージョン                  リポジトリー       容量
====================================================================================================
インストール中:
 postgresql13                 x86_64            13.5-1PGDG.rhel7            pgdg13            1.4 M
依存性関連でのインストールをします:
 postgresql13-libs            x86_64            13.5-1PGDG.rhel7            pgdg13            381 k

トランザクションの要約
====================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 1.8 M
インストール容量: 8.8 M
Downloading packages:
(1/2): postgresql13-libs-13.5-1PGDG.rhel7.x86_64.rpm                         | 381 kB  00:00:02
(2/2): postgresql13-13.5-1PGDG.rhel7.x86_64.rpm                              | 1.4 MB  00:00:02
----------------------------------------------------------------------------------------------------
合計                                                                806 kB/s | 1.8 MB  00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : postgresql13-libs-13.5-1PGDG.rhel7.x86_64                           1/2
  インストール中          : postgresql13-13.5-1PGDG.rhel7.x86_64                                2/2
  検証中                  : postgresql13-13.5-1PGDG.rhel7.x86_64                                1/2
  検証中                  : postgresql13-libs-13.5-1PGDG.rhel7.x86_64                           2/2

インストール:
  postgresql13.x86_64 0:13.5-1PGDG.rhel7

依存性関連をインストールしました:
  postgresql13-libs.x86_64 0:13.5-1PGDG.rhel7

完了しました!

pg_dumpのバージョンを確認していきます。

$ pg_dump --version
pg_dump (PostgreSQL) 13.5

参考URL

まとめ

Amazon Linux2の標準リポジトリでインストール可能なPostgreSQLのパッケージは、バージョンが結構古かったので驚きました。 前職でもパッケージ追加で割と苦労していたので、備忘として対応方法をブログに残しておきます。

この記事が、どなたかのお役に立てば幸いです。それでは!