中山テック 代表の中山です。
さて、現在代表のPCにはVMWare × CentOSのゲストOSがインストール&設定されております。
そして今回はPostgreSQLを入れてDB管理したいと思いまして、インストール~テーブル追加しましたので手順をご紹介したいと思います。
目次
リポジトリ追加
リポジトリ追加(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のリポジトリを追加することで解消します。
[root@localhost yum.repos.d]# yum -y install epel-release centos-release-scl
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ centos-release-scl.noarch 0:2-3.el7.centos を インストール
--> 依存性の処理をしています: centos-release-scl-rh のパッケージ: centos-release-scl-2-3.el7.centos.noarch
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ centos-release-scl-rh.noarch 0:2-3.el7.centos を インストール
--> 依存性解決を終了しました。
依存性を解決しました
=============================================================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
=============================================================================================================================================================================================
インストール中:
centos-release-scl noarch 2-3.el7.centos extras 12 k
epel-release noarch 7-11 extras 15 k
依存性関連でのインストールをします:
centos-release-scl-rh noarch 2-3.el7.centos extras 12 k
トランザクションの要約
=============================================================================================================================================================================================
インストール 2 パッケージ (+1 個の依存関係のパッケージ)
総ダウンロード容量: 39 k
インストール容量: 63 k
Downloading packages:
(1/3): centos-release-scl-rh-2-3.el7.centos.noarch.rpm | 12 kB 00:00:00
(2/3): centos-release-scl-2-3.el7.centos.noarch.rpm | 12 kB 00:00:00
(3/3): epel-release-7-11.noarch.rpm | 15 kB 00:00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 127 kB/s | 39 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
インストール中 : centos-release-scl-rh-2-3.el7.centos.noarch 1/3
インストール中 : centos-release-scl-2-3.el7.centos.noarch 2/3
インストール中 : epel-release-7-11.noarch 3/3
検証中 : centos-release-scl-2-3.el7.centos.noarch 1/3
検証中 : centos-release-scl-rh-2-3.el7.centos.noarch 2/3
検証中 : epel-release-7-11.noarch 3/3
インストール:
centos-release-scl.noarch 0:2-3.el7.centos epel-release.noarch 0:7-11
依存性関連をインストールしました:
centos-release-scl-rh.noarch 0:2-3.el7.centos
完了しました!
続いて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のリリースノート見てればわかると思うのですが、なかなか難しいところ・・・