PostgreSQLの起動・停止

前回でPostgreSQLのインストールが完了したので、早速起動させてみます。

RHEL7/CentOS7からはsystemctlコマンドでサービスを起動させます。

# systemctl start postgresql-9.5
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.

ただ、メッセージからわかるようにPostgreSQLの起動に失敗してしまいました。
また、メッセージではエラーの詳細は「systemctl status postgresql-9.5.service」コマンドを確認するように書かれています。ここでは割愛しますが、一度左記コマンドを実行して確認してみましょう。

ディレクトリが存在しないといったエラーが確認できると思います。これは、PostgreSQLのデータベースクラスタの作成を求められています。

データベースクラスタの作成

PostgreSQLを起動させるためには、まずデータベースクラスを作成する必要があります。
データベースクラスタとは、PostgreSQLが管理するデータを実際に記録するための領域のことです。その実態は、ファイルシステム上に作成されるディレクトリであり、その配下にPostgreSQLが管理する様々なファイルが生成されます。データベースのデータが保存されるのもこの領域になります。

1つのデータベースクラスタ内には、複数のデータベースを作成可能です。また、データベースクラスタには、データベース情報やユーザー情報など、すべてのデータベースに共通のデータも格納されます。

データベースクラスタの作成は「postgresql95-setup initdb」コマンドで行います。(パスを通していないのでフルパスで実行してください。)

# /usr/pgsql-9.5/bin/postgresql95-setup initdb
Initializing database ... OK

コマンド実行後、以下のディレクトリが作成されているはずです。

# ll /var/lib/pgsql/9.5/data
合計 48
-rw-------. 1 postgres postgres     4  4月 30 12:23 PG_VERSION
drwx------. 5 postgres postgres    38  4月 30 12:23 base
drwx------. 2 postgres postgres  4096  4月 30 12:23 global
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_clog
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_commit_ts
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_dynshmem
-rw-------. 1 postgres postgres  4224  4月 30 12:23 pg_hba.conf
-rw-------. 1 postgres postgres  1636  4月 30 12:23 pg_ident.conf
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_log
drwx------. 4 postgres postgres    37  4月 30 12:23 pg_logical
drwx------. 4 postgres postgres    34  4月 30 12:23 pg_multixact
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_notify
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_replslot
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_serial
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_snapshots
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_stat
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_stat_tmp
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_subtrans
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_tblspc
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_twophase
drwx------. 3 postgres postgres    58  4月 30 12:23 pg_xlog
-rw-------. 1 postgres postgres    88  4月 30 12:23 postgresql.auto.conf
-rw-------. 1 postgres postgres 21719  4月 30 12:23 postgresql.conf

これでPostgreSQLの起動準備が整いました。あらためて、以下コマンドを実行します。

# systemctl start postgresql-9.5

エラーメッセージなどが何も出力されなければ、起動に成功しているはずです。

以下コマンドで、PostgreSQLの状態を確認してみましょう。

# systemctl status postgresql-9.5
● postgresql-9.5.service - PostgreSQL 9.5 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2016-04-30 15:29:06 JST; 2h 50min ago
  Process: 3975 ExecStop=/usr/pgsql-9.5/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
  Process: 3987 ExecStart=/usr/pgsql-9.5/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 3982 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 3991 (postgres)
   CGroup: /system.slice/postgresql-9.5.service
           tq3991 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data
           tq3992 postgres: logger process
           tq3994 postgres: checkpointer process
           tq3995 postgres: writer process
           tq3996 postgres: wal writer process
           tq3997 postgres: autovacuum launcher process
           tq3998 postgres: stats collector process
           mq4000 postgres: postgres postgres 172.16.0.4(52929) idle

 4月 30 15:29:05 localhost.localdomain systemd[1]: Starting PostgreSQL 9.5 database server...
 4月 30 15:29:05 localhost.localdomain pg_ctl[3987]: < 2016-04-30 15:29:05.397 JST >LOG:  ログ出力をログ収集プロセスにリダイレ…います
 4月 30 15:29:05 localhost.localdomain pg_ctl[3987]: < 2016-04-30 15:29:05.397 JST >ヒント:  ここからのログ出力はディレクトリ…れます。
 4月 30 15:29:06 localhost.localdomain systemd[1]: Started PostgreSQL 9.5 database server.
Hint: Some lines were ellipsized, use -l to show in full.

エラーは特に出力されておらず、正しく起動しています。

自動起動設定

OSを起動するたび手動でPostgreSQLを起動させるのは大変なので、OS起動のタイミングでPostgreSQLが自動起動されるよう設定します。
RHEL6/CentOS6以前はchkconfigコマンドで行っていましたが、RHEL7/CentOS7からは「systemctl enable」コマンドにより設定します。

# systemctl enable postgresql-9.5
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.5.service to /usr/lib/systemd/system/postgresql-9.5.service.

これで、OS起動時にPostgreSQLも自動的に起動するようになります。