CentOS-Linux-7にPostgreSQL 10をインストールしてみた

- 関連記事
    - 続き: [PostgreSQL 10とVirtualBoxで、Windows（ホストOS兼クライアント）→CentOS（ゲストOS兼サーバ）データ送信してみた](/items/1ebd0cb37105decf6c30) 
    - [CentOS-Linux-7にPostgreSQL 11をインストールしてみた](/items/aed754b1b232dabd86a5)

#環境
```shell-session
# cat /etc/redhat-release; arch; locale | head -n1; users
CentOS Linux release 7.6.1810 (Core) 
x86_64
LANG=ja_JP.utf8
root root
```
#段取り
`root`ユーザアカウントで**[インストール](#インストール)**を行い、それによって自動生成される`postgres`ユーザアカウントで**[設定と動作テスト](#設定と動作テスト)**を行う。

- [18.1. PostgreSQLユーザアカウント](https://www.postgresql.jp/document/10/html/postgres-user.html): JPUG

#インストール
##インストール済みのPostgreSQLがあれば削除
```shell-session
# yum list installed | grep postgres
# yum remove postgresql postgresql-libs postgresql-server
# userdel -r postgres
```
##`yum`リポジトリ設定をインストール
```shell-session
# rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
```
- [PostgreSQL RPM Repository (with Yum)](https://yum.postgresql.org/repopackages.php)（英語）

##PostgreSQL10をインストール
```shell-session
# yum install postgresql10 postgresql10-libs postgresql10-server
...
完了しました!
# psql --version
psql (PostgreSQL) 10.6
```
- [psql](https://www.postgresql.jp/document/10/html/app-psql.html): JPUG

#設定と動作テスト
##データベースサーバ自動起動設定
```shell-session
# systemctl enable postgresql-10.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-10.service to /usr/lib/systemd/system/postgresql-10.service.
# systemctl list-unit-files -t service | grep postgres
postgresql-10.service                         enabled
```
##`postgres`ユーザアカウントが登録済みか確認
```shell-session
# cut -d: -f1 /etc/passwd | grep postgres
postgres
```
##`postgres`ユーザアカウントにログイン
```shell-session
# su - postgres
```
##環境変数
```shell-session
$ vim -c 'start|:set number|:2' ~/.bash_profile
```
```diff:~/.bash_profile
- PGDATA=/var/lib/pgsql/10/data
+ PGCLUSTER=10/data
+ PGHOME=/usr/pgsql-${PGCLUSTER%%\/*}
+ export PATH=$PGHOME/bin:$PATH
+ export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
+ export MANPATH=$PGHOME/share/man:$MANPATH
+ PGDATA=/var/lib/pgsql/$PGCLUSTER
```
`-`（2行目）を`+`に置き換え、[ESC]キー→`:wq`で保存・終了。

- [16.5. インストール後の設定作業](https://www.postgresql.jp/document/10/html/install-post.html): JPUG

##設定を反映
```shell-session
$ . ~/.bash_profile
$ printenv PGDATA
/var/lib/pgsql/10/data
```
##データベースクラスタを初期化
```shell-session
$ initdb --no-locale -D "$PGDATA"
```
- `--no-locale`オプション: ロケールを使用しない（推奨）
- [18.2. データベースクラスタの作成](https://www.postgresql.jp/document/10/html/creating-cluster.html): JPUG
    - [initdb](https://www.postgresql.jp/document/10/html/app-initdb.html): JPUG

##データベースサーバを起動し、現行のデータベースクラスタを確認
```shell-session
$ pg_ctl start
...
サーバ起動完了
$ psql -l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+----------+-------------------+-----------------------
 postgres  | postgres | SQL_ASCII        | C        | C                 | 
 template0 | postgres | SQL_ASCII        | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII        | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
(3 行)

$ ls "$PGDATA"
PG_VERSION        pg_commit_ts   pg_multixact  pg_stat      pg_wal                postmaster.pid
base              pg_dynshmem    pg_notify     pg_stat_tmp  pg_xact
current_logfiles  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  postmaster.opts
```
- [17.3. データベースサーバの起動](https://www.postgresql.jp/document/10/html/server-start.html): JPUG
    - [pg_ctl](https://www.postgresql.jp/document/10/html/app-pg-ctl.html): JPUG
- [22.3. テンプレートデータベース](https://www.postgresql.jp/document/10/html/manage-ag-templatedbs.html): JPUG
- [66.1. データベースファイルのレイアウト](https://www.postgresql.jp/document/10/html/storage-file-layout.html): JPUG

##Hello, World! 印字テスト
###スクリプトなし
```shell-session
$ psql -t -A -c "SELECT 'Hello, World! '"
Hello, World!
```
###スクリプトあり
```shell-session
$ vim -c 'start|:set number' ~/hello.sql
```
```sql:~/hello.sql
-- -*- mode: sql; sql-product: postgres; -*-
SELECT 'Hello, World!';
```
上記の通り入力し、[ESC]キー→`:wq`で保存・終了。
####パターン1
```shell-session
$ psql -t -A < ~/hello.sql
Hello, World!
```
####パターン2
```shell-session
$ psql -t -A -f ~/hello.sql
Hello, World!
```
- [第2章 SQL言語](https://www.postgresql.jp/document/10/html/tutorial-sql.html): JPUG
    - [SELECT](https://www.postgresql.jp/document/10/html/sql-select.html): JPUG

##ログアウト
```shell-session
$ logout
```
- 続き: [PostgreSQL 10とVirtualBoxで、Windows（ホストOS兼クライアント）→CentOS（ゲストOS兼サーバ）データ送信してみた](/items/1ebd0cb37105decf6c30) 

#参考
- [日本PostgreSQLユーザ会（JPUG）](https://www.postgresql.jp/)
    - [PostgreSQL 10.5文書](https://www.postgresql.jp/document/10/html/): JPUG
- [PostgreSQL 本家](https://www.postgresql.org/)（英語）
    - [PostgreSQL 10.6 Documentation](https://www.postgresql.org/docs/10/): ポスグレ本家（英語）