CentOSにPostgreSQL(15)をインストールする~リポジトリからテーブル追加まで~

中山テック 代表の中山です。

さて、現在代表のPCにはVMWare × CentOSのゲストOSがインストール&設定されております。

そして今回はPostgreSQLを入れてDB管理したいと思いまして、インストール~テーブル追加しましたので手順をご紹介したいと思います。







  • VMware × CentOS関連索引

リポジトリ追加(yum)

※これから行う操作はrootでしか行えないものも多いのでログインしておきましょう。

インストールの際に[yum]というコマンドを使用しますが、リポジトリというソフトウェアを管理する場所にrpmファイルを追加します。

rpmファイルは、今回ならPostgreSQLのパッケージを管理するためのもので、yumによるインストールを行えるようにしてくれます。

関連性の説明はまたどこかで・・・

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

/var/tmp/yum-root-RZYpwd/pgdg-redhat-repo-latest.noarch.rpm を調べています: pgdg-redhat-repo-42.0-38PGDG.noarch
/var/tmp/yum-root-RZYpwd/pgdg-redhat-repo-latest.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ pgdg-redhat-repo.noarch 0:42.0-38PGDG を インストール
--> 依存性解決を終了しました。
base/7/x86_64                                                                                                                                                         | 3.6 kB  00:00:00
extras/7/x86_64                                                                                                                                                       | 2.9 kB  00:00:00
updates/7/x86_64                                                                                                                                                      | 2.9 kB  00:00:00

依存性を解決しました

=============================================================================================================================================================================================
 Package                                      アーキテクチャー                   バージョン                                リポジトリー                                                 容量
=============================================================================================================================================================================================
インストール中:
 pgdg-redhat-repo                             noarch                             42.0-38PGDG                               /pgdg-redhat-repo-latest.noarch                              12 k

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

合計容量: 12 k
インストール容量: 12 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : pgdg-redhat-repo-42.0-38PGDG.noarch                                                                                                                          1/1
  検証中                  : pgdg-redhat-repo-42.0-38PGDG.noarch                                                                                                                          1/1

インストール:
  pgdg-redhat-repo.noarch 0:42.0-38PGDG

「pgdg-redhat-repo-latest.noarch.rpm」という管理ファイルが追加されました。

これでPostgreSQLをダウンロードするための準備が整いました。

リポジトリ確認

念のためリポジトリに追加されているか確認しましょう。

[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls -ltr
合計 52
-rw-r--r--. 1 root root  616 11月 24  2020 CentOS-x86_64-kernel.repo
-rw-r--r--. 1 root root  314 11月 24  2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 8515 11月 24  2020 CentOS-Vault.repo
-rw-r--r--. 1 root root 1331 11月 24  2020 CentOS-Sources.repo
-rw-r--r--. 1 root root  630 11月 24  2020 CentOS-Media.repo
-rw-r--r--. 1 root root  649 11月 24  2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1309 11月 24  2020 CentOS-CR.repo
-rw-r--r--. 1 root root 1664 11月 24  2020 CentOS-Base.repo
-rw-r--r--. 1 root root 9613 12月 26 08:11 pgdg-redhat-all.repo

無事追加されていました。

念のため中を見てみましょう。「view pgdg-redhat-all.repo」(viewはcatでもOK)で確認。

#######################################################
# PGDG Red Hat Enterprise Linux / CentOS repositories #
#######################################################

# PGDG Red Hat Enterprise Linux / CentOS stable common repository for all PostgreSQL versions

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

# We provide extra package to support some RPMs in the PostgreSQL RPM repo, like
# consul, haproxy, etc.

[pgdg-rhel7-extras]
name=Extra packages to support some RPMs in the PostgreSQL RPM repo RHEL / CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/common/pgdg-rhel$releasever-extras/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL7
repo_gpgcheck = 1

# PGDG Red Hat Enterprise Linux / CentOS stable repositories:

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

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

~~~以下略~~~

各種ミラーサイトが設定されております。

見た感じPostgreSQL-15まではyumインストールできるようなので15でインストールします。

インストール

インストール対象パッケージを検索

yumコマンドを使用してPostgreSQL15をインストールを行います。

が、まずはどのパッケージでインストールすればよいのかを確認しましょう。

※RedHat Linux系ディストリビューションのコマンドなので、Debian系Solaris系で異なります

[root@localhost yum.repos.d]# yum search postgresql
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
================================================================================== N/S matched: postgresql ==================================================================================
freeradius-postgresql.x86_64 : Postgresql support for freeradius
libreoffice-postgresql.x86_64 : PostgreSQL connector for LibreOffice
pcp-pmda-postgresql.x86_64 : Performance Co-Pilot (PCP) metrics for PostgreSQL

~~中略~~

postgresql15.x86_64 : PostgreSQL client programs and libraries
postgresql15-contrib.x86_64 : Contributed source and binaries distributed with PostgreSQL
postgresql15-devel.x86_64 : PostgreSQL development header files and libraries
postgresql15-docs.x86_64 : Extra documentation for PostgreSQL
postgresql15-libs.x86_64 : The shared libraries required for any PostgreSQL clients
postgresql15-llvmjit.x86_64 : Just-in-time compilation support for PostgreSQL
postgresql15-odbc.x86_64 : PostgreSQL ODBC driver
postgresql15-plperl.x86_64 : The Perl procedural language for PostgreSQL
postgresql15-plpython3.x86_64 : The Python3 procedural language for PostgreSQL
postgresql15-pltcl.x86_64 : The Tcl procedural language for PostgreSQL
postgresql15-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql15-tcl.x86_64 : A Tcl client library for PostgreSQL
postgresql15-test.x86_64 : The test suite distributed with PostgreSQL

「postgresql15-server.x86_64」をインストールしてあげればよさそうです。

しかし・・・

依存関係に問題アリ

パッケージは依存関係に問題があるため、飛ばします:
    postgresql15-15.6-1PGDG.rhel7.x86_64 (pgdg15 から)
    postgresql15-libs-15.6-1PGDG.rhel7.x86_64 (pgdg15 から)
    postgresql15-server-15.6-1PGDG.rhel7.x86_64 (pgdg15 から)

調べてみたらLLVM関連パッケージに依存しているらしく、EPELとSCLのリポジトリを追加することで解消します。

こちらのサイトを参考にしましたhttps://qiita.com/tom-sato

続いてPostgreSQL-15のインストールを行います。

[root@localhost yum.repos.d]# yum -y install postgresql15-server.x86_64
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                                                                  | 6.9 kB  00:00:00
 * base: mirrors.huaweicloud.com
 * centos-sclo-rh: ftp.riken.jp
 * centos-sclo-sclo: ftp.riken.jp
 * epel: mirror-nrt.yuki.net.uk
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
centos-sclo-rh                                                                                                                                                        | 3.0 kB  00:00:00
centos-sclo-sclo                                                                                                                                                      | 3.0 kB  00:00:00
epel                                                                                                                                                                  | 4.7 kB  00:00:00
(1/5): centos-sclo-sclo/x86_64/primary_db                                                                                                                             | 300 kB  00:00:00
epel/x86_64/updateinfo         FAILED                                            9% [======-                                                               ]  0.0 B/s | 1.1 MB  --:--:-- ETA
https://mirror-icn.yuki.net.uk/fedora-epel/7/x86_64/repodata/5c12d1bf5cac7d63c718c53a84ba538494562ffcec6263c26ab5774d04e673bd-updateinfo.xml.bz2: [Errno 14] HTTPS Error 404 - Not Found ETA
他のミラーを試します。
To address this issue please refer to the below wiki article

https://wiki.centos.org/yum-errors

If above article doesn't help to resolve this issue please use https://bugs.centos.org/.

(2/5): centos-sclo-rh/x86_64/primary_db                                                                                                                               | 3.4 MB  00:00:01
(3/5): epel/x86_64/group_gz                                                                                                                                           | 100 kB  00:00:00
(4/5): epel/x86_64/updateinfo                                                                                                                                         | 1.0 MB  00:00:01
(5/5): epel/x86_64/primary_db                                                                                                                                         | 7.0 MB  00:00:04
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ postgresql15-server.x86_64 0:15.6-1PGDG.rhel7 を インストール
--> 依存性の処理をしています: postgresql15-libs(x86-64) = 15.6-1PGDG.rhel7 のパッケージ: postgresql15-server-15.6-1PGDG.rhel7.x86_64
--> 依存性の処理をしています: postgresql15(x86-64) = 15.6-1PGDG.rhel7 のパッケージ: postgresql15-server-15.6-1PGDG.rhel7.x86_64
--> 依存性の処理をしています: libzstd.so.1()(64bit) のパッケージ: postgresql15-server-15.6-1PGDG.rhel7.x86_64
--> 依存性の処理をしています: libpq.so.5()(64bit) のパッケージ: postgresql15-server-15.6-1PGDG.rhel7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libzstd.x86_64 0:1.5.5-1.el7 を インストール
---> パッケージ postgresql15.x86_64 0:15.6-1PGDG.rhel7 を インストール
---> パッケージ postgresql15-libs.x86_64 0:15.6-1PGDG.rhel7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================
 Package                                             アーキテクチャー                       バージョン                                          リポジトリー                            容量
=============================================================================================================================================================================================
インストール中:
 postgresql15-server                                 x86_64                                 15.6-1PGDG.rhel7                                    pgdg15                                 5.8 M
依存性関連でのインストールをします:
 libzstd                                             x86_64                                 1.5.5-1.el7                                         epel                                   292 k
 postgresql15                                        x86_64                                 15.6-1PGDG.rhel7                                    pgdg15                                 1.6 M
 postgresql15-libs                                   x86_64                                 15.6-1PGDG.rhel7                                    pgdg15                                 286 k

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

総ダウンロード容量: 8.0 M
インストール容量: 34 M
Downloading packages:
警告: /var/cache/yum/x86_64/7/epel/packages/libzstd-1.5.5-1.el7.x86_64.rpm: ヘッダー V4 RSA/SHA256 Signature、鍵 ID 352c64e5: NOKEY                        ]  0.0 B/s |    0 B  --:--:-- ETA
libzstd-1.5.5-1.el7.x86_64.rpm の公開鍵がインストールされていません
(1/4): libzstd-1.5.5-1.el7.x86_64.rpm                                                                                                                                 | 292 kB  00:00:00
警告: /var/cache/yum/x86_64/7/pgdg15/packages/postgresql15-libs-15.6-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID 73e3b907: NOKEY         ]  63 kB/s | 388 kB  00:02:03 ETA
postgresql15-libs-15.6-1PGDG.rhel7.x86_64.rpm の公開鍵がインストールされていません
(2/4): postgresql15-libs-15.6-1PGDG.rhel7.x86_64.rpm                                                                                                                  | 286 kB  00:00:02
(3/4): postgresql15-15.6-1PGDG.rhel7.x86_64.rpm                                                                                                                       | 1.6 MB  00:00:04
(4/4): postgresql15-server-15.6-1PGDG.rhel7.x86_64.rpm                                                                                                                | 5.8 MB  00:00:07
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                         824 kB/s | 8.0 MB  00:00:09
file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL7 から鍵を取得中です。
Importing GPG key 0x73E3B907:
 Userid     : "PostgreSQL RPM Repository <pgsql-pkg-yum@lists.postgresql.org>"
 Fingerprint: f245 f0bf 96ac 1827 44ca ff2e 64fa ce11 73e3 b907
 Package    : pgdg-redhat-repo-42.0-38PGDG.noarch (@/pgdg-redhat-repo-latest.noarch)
 From       : /etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL7
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-11.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libzstd-1.5.5-1.el7.x86_64                                                                                                                                   1/4
  インストール中          : postgresql15-libs-15.6-1PGDG.rhel7.x86_64                                                                                                                    2/4
  インストール中          : postgresql15-15.6-1PGDG.rhel7.x86_64                                                                                                                         3/4
  インストール中          : postgresql15-server-15.6-1PGDG.rhel7.x86_64                                                                                                                  4/4
  検証中                  : postgresql15-15.6-1PGDG.rhel7.x86_64                                                                                                                         1/4
  検証中                  : postgresql15-libs-15.6-1PGDG.rhel7.x86_64                                                                                                                    2/4
  検証中                  : postgresql15-server-15.6-1PGDG.rhel7.x86_64                                                                                                                  3/4
  検証中                  : libzstd-1.5.5-1.el7.x86_64                                                                                                                                   4/4

インストール:
  postgresql15-server.x86_64 0:15.6-1PGDG.rhel7

依存性関連をインストールしました:
  libzstd.x86_64 0:1.5.5-1.el7                          postgresql15.x86_64 0:15.6-1PGDG.rhel7                          postgresql15-libs.x86_64 0:15.6-1PGDG.rhel7

完了しました!

OK!



  • システム開発関連記事

初期化~DB作成

初期化~DB確認

インストール後は初期化してあげないと起動しません。

/usr/pgsql-15/bin/postgresql-15-setup initdb

そしてsystemctlをサービス自動起動有効(どっちでもいいけど)のうえ、スタートします。

systemctl enable postgresql-15
systemctl start postgresql-15

DB起動するためにユーザを「postgres」に変更します。

※インストール時に追加されている模様

sudo su - postgres

psqlコマンドでDBにアクセスします。

psql

postgres=#
↑これが出てきたらDB内操作が可能になる

postgres=# \l
                                                            データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) | ICUロケール | ロケールプロバイダー |     アクセス権限
-----------+----------+------------------+-------------+-------------------+-------------+----------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 | =c/postgres          +
           |          |                  |             |                   |             |                      | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 | =c/postgres          +
           |          |                  |             |                   |             |                      | postgres=CTc/postgres
(3 行)

オリジナルDB作成(CREATE DATABASE)

今回はデフォルトのDB「postgres」を使用せず、オリジナルのDBを使用します。

試しに「testDB」という名前で作成していきます。

create database testDB;

打ち込んで「CREATE DATABASE」が出てきたら成功です。

postgres=# \l
                                                            データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) | ICUロケール | ロケールプロバイダー |     アクセス権限
-----------+----------+------------------+-------------+-------------------+-------------+----------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 | =c/postgres          +
           |          |                  |             |                   |             |                      | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 | =c/postgres          +
           |          |                  |             |                   |             |                      | postgres=CTc/postgres
 testdb    | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |             | libc                 |
(4 行)

データベースをpostgresからtestdbに切り替えます。

一旦「\q」でpostgresDBアクセスを抜け、下記のコマンドを入力します。

-bash-4.2$ psql testdb
psql (15.6)
"help"でヘルプを表示します。

testdb=#

「psql DB名」でアクセスできます。

テーブル、レコード追加

DBが出来た所でテーブルを追加しましょう。

ID、名前、年齢を入れるだけの簡単なテーブルです。

create table t_member(
  id serial,
  name varchar(40),
  age varchar(3)
);

serial型は勝手1から始まり、INSERTするたびに1ずつ数字が上がっていきます。

※OracleのSequenceのようなもの。他にもsmallserialという2バイトの型や、bigserialという8バイトの型もある。通常のは4バイト

続いてデータを登録していきます。

insert into t_member (name,age) values ('中山テック','42');

INSERT 0 1

無事INSERT出来ました!idは自動採番されるので指定なしでOKです。

最後にSELECTでちゃんと登録されているかを確認します。

testdb=# select * from t_member;
 id |    name    | age
----+------------+-----
  1 | 中山テック | 42
(1 行)

これにてPostgreSQLの準備はバッチリです!



まとめ

さて、CentOSにPostgreSQLを入れることが出来ました。

相変わらず備忘的な内容なので、雑な感じなのは申し訳ないですが参考になれば幸いです。

ちなみに苦労したのは15を入れる時の依存関係。

LLVMというコンパイルが必要なプログラミングを最適化してくれる基盤に依存するようになったということ。

普段からPostgreSQLのリリースノート見てればわかると思うのですが、なかなか難しいところ・・・



  • VMware × CentOS関連索引

※中山テックに掲載しているゲーム画像の著作権、商標権、その他知的財産権は、当該コンテンツの提供元に帰属します


おすすめの記事