前回で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も自動的に起動するようになります。