PostgreSQLのインストール

PostgreSQLインストール時の設定メモです。

公式の参考サイト

環境情報

PostgreSQLの初期設定

必要パッケージのインストール

yumリポジトリのインストール。

$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm

clientパッケージをインストール。

$ sudo yum -y install postgresql10
$ psql --version
psql (PostgreSQL) 10.7 

serverパッケージのインストール。

$ sudo yum install -y postgresql10-server
$ sudo yum install -y postgresql10-contrib
$ 

OSのロケールタイムゾーン設定

作成されるデータベースは、OSに設定されたロケールタイムゾーンを参照するため、OSの設定を日本用に変更しておきます。

日本語用ロケールのモジュールをインストール。

$ sudo yum reinstall -y glibc-common
$
$ localectl list-locales | grep ja_JP.utf8
ja_JP.utf8

ロケールja_JP.utf8 に。

$ sudo localectl set-locale LANG=ja_JP.utf8
$
$ sudo localectl set-keymap jp106
$
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

タイムゾーンAsia/Tokyo に。

$ sudo timedatectl set-timezone Asia/Tokyo

OSユーザ postgres の設定

パッケージをインストールすることで、OSユーザ postgres が作成されています。このOSユーザにsudo権限を追加。

$ sudo visudo
...
root    ALL=(ALL)       ALL
postgres    ALL=(ALL)       NOPASSWD: ALL
...

postgres OSユーザにスイッチ。

$ sudo su - postgres

PostgreSQLデータベースの初期化/起動

データベースクラスタの新規作成。

$ sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Initializing database ... OK

PostgreSQL - initdb

ログ /var/lib/pgsql/10/initdb.log

データベースシステム内のファイルの所有者は"postgres"となります。
このユーザがサーバプロセスも所有する必要があります。

データベースクラスタはロケール"ja_JP.utf8"で初期化されます。
そのためデフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.utf8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。

データベージのチェックサムは無効です。

既存のディレクトリ/var/lib/pgsql/10/dataの権限を修正します ... 完了
サブディレクトリを作成します ... 完了
max_connectionsのデフォルト値を選択します ... 100
shared_buffersのデフォルト値を選択します ... 128MB
動的共有メモリの実装を選択します ... posix
設定ファイルを作成します ... 完了
ブートストラップスクリプトを実行します ... 完了
ブートストラップ後の初期化を行っています ... 完了
データをディスクに同期します...完了

成功しました。以下のようにしてデータベースサーバを起動できます。

    /usr/pgsql-10/bin/pg_ctl -D /var/lib/pgsql/10/data/ -l <ログファイル> start

自動起動設定の有効化。

$ sudo systemctl enable postgresql-10

起動。

$ sudo systemctl start postgresql-10
$
$ ps -aef | grep postgres
root     15113 14208  0 13:59 pts/0    00:00:00 su postgres
postgres 15117 15113  0 13:59 pts/0    00:00:00 bash
postgres 15268     1  0 14:11 ?        00:00:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data/
postgres 15270 15268  0 14:11 ?        00:00:00 postgres: logger process
postgres 15272 15268  0 14:11 ?        00:00:00 postgres: checkpointer process
postgres 15273 15268  0 14:11 ?        00:00:00 postgres: writer process
postgres 15274 15268  0 14:11 ?        00:00:00 postgres: wal writer process
postgres 15275 15268  0 14:11 ?        00:00:00 postgres: autovacuum launcher process
postgres 15276 15268  0 14:11 ?        00:00:00 postgres: stats collector process
postgres 15277 15268  0 14:11 ?        00:00:00 postgres: bgworker: logical replication launcher
postgres 15280 15117  0 14:11 pts/0    00:00:00 ps -aef
postgres 15281 15117  0 14:11 pts/0    00:00:00 grep postgres

確認

データベースに接続し、利用されているロケール文字コードを確認。

$ psql
psql (10.7)
Type "help" for help.

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

postgres=# show timezone;
 TimeZone
----------
 Japan
(1 行)