見出し画像

[PostgreSQL]CentOS7に環境構築_インストールとPATH変更まで[01]

どもども。
インフラエンジニアのしょうと申すものです。
今日からぼちぼちnoteを使わせてもらおうかなと思います。

基本的にサーバ・ネットワーク系のエンジニアですが、DeepLearning・
自然言語処理・Webスクレイピング・RPA・HTML/CSS等割と幅広く
独学で学び、実装して遊んでいるタイプのオタク系人間です。
どうぞお見知りおきを。



・・・まあ自分の話を長々としても興味ないと思いますので、
さっそく本題に入ります。

この記事の目次は以下になります。




1.PostgresSQLとは

The PostgreSQL Global Development Groupには以下の様に記載されてます。

PostgreSQL is a powerful, open source object-relational database system that uses and extends the SQL language.
  
PostgreSQLは、SQL言語を使用および拡張する強力なオープンソースのオブジェクトリレーショナルデータベースシステムであり、最も複雑なデータワークロードを安全に格納およびスケーリングする多くの機能と組み合わされています。


サイトでは難しく書いていますが、
・SQL言語を使う
・オープンソース
・リレーショナルデータベースシステム
ってことをとりあえず覚えておけば良いような気がします。
それ以外の事は、実装を通じて理解をしていきたいと思います。

サイトのURLは以下になります。
より詳しく見たい方はどうぞ
引用:PostgreSQLについて



2.実行環境

今回は

PC:Surface Laptop3
ホストOS:Windows10
仮想化ソフト:VMWare Workstation Player
仮想サーバOS:CentOS7
PostgreSQL:ver13

で行きたいと思います。
PostgreSQLは、このnoteを書いている時の最新バージョンになります。

イメージとしては以下になります。
難しいことはしていませんが、VMware上にCentOS7の検証仮想サーバを立てて、
そのあとにyumコマンドを使ってPostgreSQLをインストールしていくって感じです。

画像1

icon used from icon-icons.com
figure created by draw.io



3.環境構築

構築しきます。
まず、PostgreSQLの環境構築用のユーザを作成するのが鉄板の様です。
今回は参考にした書籍により、postgresというユーザを作成しました。
※rootユーザだとPostgresのデータベースクラスタを作成出来なかったり、
 色々不都合なので作成したほうが吉です。

useraddコマンドでCentOS7に新規ユーザを作成、
passwdコマンドで対象ユーザのパスワードを指定。
/etc/passwdを見ることで一応作成されているかを確認しています。

[root@ssh_server ~]# useradd postgres 
[root@ssh_server ~]# passwd postgres 
ユーザー postgres のパスワードを変更。 
新しいパスワード: 
よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。 
新しいパスワードを再入力してください: 
passwd: すべての認証トークンが正しく更新できました。 
[root@ssh_server ~]# cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin 
daemon:x:2:2:daemon:/sbin:/sbin/nologin 
adm:x:3:4:adm:/var/adm:/sbin/nologin 
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
sync:x:5:0:sync:/sbin:/bin/sync 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
halt:x:7:0:halt:/sbin:/sbin/halt 
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 
operator:x:11:0:operator:/root:/sbin/nologin 
games:x:12:100:games:/usr/games:/sbin/nologin 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 
nobody:x:99:99:Nobody:/:/sbin/nologin 
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 
dbus:x:81:81:System message bus:/:/sbin/nologin 
polkitd:x:999:998:User for polkitd:/:/sbin/nologin 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 
postfix:x:89:89::/var/spool/postfix:/sbin/nologin 
chrony:x:998:996::/var/lib/chrony:/sbin/nologin 
ssh_user:x:1000:1000:ssh_user:/home/ssh_user:/bin/bash 
postgres:x:1001:1001::/home/postgres:/bin/bash


次にCentOS7のリポジトリにPostgreSQLを追加する作業を行います。
CentOS7のデフォルトのリポジトリにはPostgresSQLが無いようです。
このままyumコマンドを実行しても「んなもんねーよ!!」と怒られます。
それを回避します。

以下のサイトにアクセスして構築したい環境を選択します。
今回はLinuxのCentOS7で選択しています。
https://www.postgresql.org/download/

画像2


遷移するとPostgreSQLのバージョンとプラットフォームとアーキテクチャの
入力を求められるので選択します。
アーキテクチャはCentOS7の場合、以下のコマンドで確認することが出来ます。

[postgres@ssh_server ~]$ arch 
x86_64


選択を進めていくと、以下の様にリポジトリ設定用のコマンドと、
PostgreSQLをインストールするためのコマンド、起動させるためのコマンドが
表示されます。これをCentOS7に入力していきましょう。

画像3


入力した際の出力を記載します。

[root@ssh_server ~]# sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 
読み込んだプラグイン:fastestmirror 
pgdg-redhat-repo-latest.noarch.rpm                                                             | 6.8 kB  00:00:00 
/var/tmp/yum-root-AA16eW/pgdg-redhat-repo-latest.noarch.rpm を調べています: pgdg-redhat-repo-42.0-14.noarch 
/var/tmp/yum-root-AA16eW/pgdg-redhat-repo-latest.noarch.rpm をインストール済みとして設定しています 
依存性の解決をしています 
--> トランザクションの確認を実行しています。 
---> パッケージ pgdg-redhat-repo.noarch 0:42.0-14 を インストール 
--> 依存性解決を終了しました。 
依存性を解決しました 
====================================================================================================================== 
Package                     アーキテクチャー  バージョン            リポジトリー                                容量 
====================================================================================================================== 
インストール中: 
pgdg-redhat-repo            noarch            42.0-14               /pgdg-redhat-repo-latest.noarch             11 k 
トランザクションの要約 
====================================================================================================================== 
インストール  1 パッケージ 
合計容量: 11 k 
インストール容量: 11 k 
Downloading packages: 
Running transaction check 
Running transaction test 
Transaction test succeeded 
Running transaction 
 インストール中          : pgdg-redhat-repo-42.0-14.noarch                                                       1/1 
 検証中                  : pgdg-redhat-repo-42.0-14.noarch                                                       1/1 
インストール: 
 pgdg-redhat-repo.noarch 0:42.0-14 
完了しました! 
[root@ssh_server ~]# sudo yum install -y postgresql13-server 
読み込んだプラグイン:fastestmirror 
Determining fastest mirrors 
* base: ftp.riken.jp 
* extras: ftp.riken.jp 
* updates: ftp.riken.jp 
base                                                                                           | 3.6 kB  00:00:00 
extras                                                                                         | 2.9 kB  00:00:00 
pgdg-common                                                                                    | 2.9 kB  00:00:00 
pgdg10                                                                                         | 3.6 kB  00:00:00 
pgdg11                                                                                         | 3.6 kB  00:00:00 
pgdg12                                                                                         | 3.6 kB  00:00:00 
pgdg13                                                                                         | 3.6 kB  00:00:00 
pgdg95                                                                                         | 3.6 kB  00:00:00 
pgdg96                                                                                         | 3.6 kB  00:00:00 
updates                                                                                        | 2.9 kB  00:00:00 
(1/17): base/7/x86_64/group_gz                                                                 | 153 kB  00:00:00 
(2/17): extras/7/x86_64/primary_db                                                             | 232 kB  00:00:00 
(3/17): pgdg10/7/x86_64/group_gz                                                               |  245 B  00:00:01 
(4/17): pgdg11/7/x86_64/group_gz                                                               |  245 B  00:00:01 
(5/17): pgdg12/7/x86_64/group_gz                                                               |  245 B  00:00:00 
(6/17): pgdg11/7/x86_64/primary_db                                                             | 334 kB  00:00:01 
(7/17): pgdg13/7/x86_64/group_gz                                                               |  246 B  00:00:00 
(8/17): pgdg-common/7/x86_64/primary_db                                                        | 127 kB  00:00:03 
(9/17): pgdg13/7/x86_64/primary_db                                                             | 101 kB  00:00:00 
(10/17): pgdg95/7/x86_64/group_gz                                                              |  249 B  00:00:00 
(11/17): pgdg95/7/x86_64/primary_db                                                            | 272 kB  00:00:00 
(12/17): pgdg12/7/x86_64/primary_db                                                            | 193 kB  00:00:01 
(13/17): pgdg96/7/x86_64/group_gz                                                              |  249 B  00:00:00 
(14/17): pgdg10/7/x86_64/primary_db                                                            | 317 kB  00:00:03 
(15/17): pgdg96/7/x86_64/primary_db                                                            | 309 kB  00:00:00 
(16/17): base/7/x86_64/primary_db                                                              | 6.1 MB  00:00:06 
(17/17): updates/7/x86_64/primary_db                                                           | 7.1 MB  00:00:02 
依存性の解決をしています 
--> トランザクションの確認を実行しています。 
---> パッケージ postgresql13-server.x86_64 0:13.2-1PGDG.rhel7 を インストール 
--> 依存性の処理をしています: postgresql13-libs(x86-64) = 13.2-1PGDG.rhel7 のパッケージ: postgresql13-server-13.2-1PGDG.rhel7.x86_64 
--> 依存性の処理をしています: postgresql13(x86-64) = 13.2-1PGDG.rhel7 のパッケージ: postgresql13-server-13.2-1PGDG.rhel7.x86_64 
--> 依存性の処理をしています: libpq.so.5()(64bit) のパッケージ: postgresql13-server-13.2-1PGDG.rhel7.x86_64 
--> トランザクションの確認を実行しています。 
---> パッケージ postgresql13.x86_64 0:13.2-1PGDG.rhel7 を インストール 
---> パッケージ postgresql13-libs.x86_64 0:13.2-1PGDG.rhel7 を インストール 
--> 依存性解決を終了しました。 
依存性を解決しました 
====================================================================================================================== 
Package                            アーキテクチャー      バージョン                      リポジトリー           容量 
====================================================================================================================== 
インストール中: 
postgresql13-server                x86_64                13.2-1PGDG.rhel7                pgdg13                5.4 M 
依存性関連でのインストールをします: 
postgresql13                       x86_64                13.2-1PGDG.rhel7                pgdg13                1.4 M 
postgresql13-libs                  x86_64                13.2-1PGDG.rhel7                pgdg13                379 k 
トランザクションの要約 
====================================================================================================================== 
インストール  1 パッケージ (+2 個の依存関係のパッケージ) 
総ダウンロード容量: 7.2 M 
インストール容量: 30 M 
Downloading packages: 
警告: /var/cache/yum/x86_64/7/pgdg13/packages/postgresql13-libs-13.2-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY 
postgresql13-libs-13.2-1PGDG.rhel7.x86_64.rpm の公開鍵がインストールされていません 
(1/3): postgresql13-libs-13.2-1PGDG.rhel7.x86_64.rpm                                           | 379 kB  00:00:03 
(2/3): postgresql13-13.2-1PGDG.rhel7.x86_64.rpm                                                | 1.4 MB  00:00:04 
(3/3): postgresql13-server-13.2-1PGDG.rhel7.x86_64.rpm                                         | 5.4 MB  00:00:02 
---------------------------------------------------------------------------------------------------------------------- 
合計                                                                                  1.2 MB/s | 7.2 MB  00:00:05 
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG から鍵を取得中です。 
Importing GPG key 0x442DF0F8: 
Userid     : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>" 
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8 
Package    : pgdg-redhat-repo-42.0-14.noarch (@/pgdg-redhat-repo-latest.noarch) 
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG 
Running transaction check 
Running transaction test 
Transaction test succeeded 
Running transaction 
 インストール中          : postgresql13-libs-13.2-1PGDG.rhel7.x86_64                                             1/3 
 インストール中          : postgresql13-13.2-1PGDG.rhel7.x86_64                                                  2/3 
 インストール中          : postgresql13-server-13.2-1PGDG.rhel7.x86_64                                           3/3 
 検証中                  : postgresql13-server-13.2-1PGDG.rhel7.x86_64                                           1/3 
 検証中                  : postgresql13-13.2-1PGDG.rhel7.x86_64                                                  2/3 
 検証中                  : postgresql13-libs-13.2-1PGDG.rhel7.x86_64                                             3/3 
インストール: 
 postgresql13-server.x86_64 0:13.2-1PGDG.rhel7 
依存性関連をインストールしました: 
 postgresql13.x86_64 0:13.2-1PGDG.rhel7                  postgresql13-libs.x86_64 0:13.2-1PGDG.rhel7 
完了しました! 
[root@ssh_server ~]# sudo /usr/pgsql-13/bin/postgresql-13-setup initdb 
Initializing database ... OK 
[root@ssh_server ~]# sudo systemctl enable postgresql-13 
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-13.service to /usr/lib/systemd/system/postgresql-13.service. 
[root@ssh_server ~]# sudo systemctl start postgresql-13


次にPostgreSQLのコマンドをCentOS7が認識するように設定をしていきます。
おそらくデフォルトの状態だと/usr/pgsql-13/bin/配下にコマンドセットが
格納されているはずです。

[postgres@ssh_server ~]$ ls /usr/pgsql-13/bin/ 
clusterdb   initdb             pg_controldata  pg_receivewal  pg_test_timing   postgres                    reindexdb 
createdb    pg_archivecleanup  pg_ctl          pg_resetwal    pg_upgrade       postgresql-13-check-db-dir  vacuumdb 
createuser  pg_basebackup      pg_dump         pg_restore     pg_verifybackup  postgresql-13-setup 
dropdb      pg_checksums       pg_dumpall      pg_rewind      pg_waldump       postmaster 
dropuser    pg_config          pg_isready      pg_test_fsync  pgbench          psql


これらを環境変数PATHに登録しないとコマンドをフルパスでしか認識しないことになり、非常に面倒です。
デフォルトのPATHを見てみると以下のようになっていると思います。

[postgres@ssh_server ~]$ echo $PATH 
/sbin:/bin:/usr/sbin:/usr/bin 


PATHを通すとき、一時的に通すやり方と永続的に通すやり方がありますが、
今回は永続的に通すやり方で実装してみます。
postgreSQLを操作するユーザは、今回の環境の場合postgresユーザなので
それにスイッチしてユーザのホームディレクトリ配下のファイルを確認します。
(rootで操作をしている場合、sudo su - postgresでスイッチ出来るはずです。)

[postgres@ssh_server ~]$ pwd 
/home/postgres 
[postgres@ssh_server ~]$ ls -a 
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .psql_history  data 


PATHを永続的に変更する為にはこのファイルの中の
.bash_profileというファイルを編集する必要があります。

デフォルトでは以下の様な内容が記載されています。

[postgres@ssh_server ~]$ cat .bash_profile 
# .bash_profile 
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
       . ~/.bashrc 
fi 
# User specific environment and startup programs 
PATH=$PATH:$HOME/.local/bin:$HOME/bin 
export PATH 


これをviコマンドを使って以下のように書き換えます。
export PATHの後に「export PATH=$PATH:/usr/pgsql-13/bin/」を追記します。
※$PATH:以降は環境に合わせて記載してください。

[postgres@ssh_server ~]$ cat .bash_profile 
# .bash_profile 
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
       . ~/.bashrc 
fi 
# User specific environment and startup programs 
PATH=$PATH:$HOME/.local/bin:$HOME/bin 
export PATH 
export PATH=$PATH:/usr/pgsql-13/bin/ 


PATHが通ったことで、フルパスで指定しなくても、
PostgreSQLのコマンド各種が通るようになるはずです。



4.感想

PostgreSQL環境を構築すること自体は、
日々サーバに触れている人であれば問題の無い操作感だと思う。

ただ、サーバの操作に慣れていない人だと
「リポジトリって何?」
とか
「パスを通すって何?永続?一時的?」
みたいなことになりがちになりそうだと感じた。

DB自体はIoTとかDeepLearning等で今後より頻繁に
利用されるものになっていくと思うので、環境構築や
操作感にはなれておいた方が良いだろうなと感じている。



5.今後やりたいこと

とりあえず、PostgreSQLのコマンドの確認とか、
Pythonを使ったPostgreSQLの操作方法を確認してみたい。

Pythonで操作する為にはドライバを別途用意しないといけないみたいですね。

この記事が気に入ったらサポートをしてみませんか?