2014/09/01

CentOS 7でPostgreSQL 9.2のRPMパッケージをインストールしてsystemdを使って起動する

はじめに

CentOS 7.0へPostgreSQLのRPMパッケージをインストールし、systemd経由で起動させるための備忘録です。2014/8/31時点でCentOS 7.0のBaseリポジトリに登録されているPostgreSQLのバージョンは9.2.7-1でした。

PostgreSQLのインストールと起動

環境

インストール環境は以下です

プラットフォーム さくらのVPS (SSD 1G)
OS CentOS 7.0 x86_64 (64bit)
PostgreSQLのRPMパッケージのインストール

PostgreSQLのRPMパッケージをインストールします。Baseリポジトリにパッケージが存在するので、yumでインストールします。

% sudo yum install postgresql postgresql-server postgresql-libs postgresql-devel postgresql-contrib
PostgreSQLの起動

起動を試みますが失敗します。

% sudo systemctl start postgresql.service
[sudo] password for shimizu:
Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.

詳細を観るためにstatusを確認しろ、といったメッセージが出ますのでとりあえず確認してみます。PostgreSQLのデータディレクトリがない、といった内容のメッセージが出力されているようです。

% sudo systemctl status postgresql.service
postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
   Active: failed (Result: exit-code) since 日 2014-08-31 21:36:51 JST; 16s ago
  Process: 6571 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

PostgreSQLのユニットファイル/usr/lib/systemd/system/postgresql.serviceでデータディレクトリに何が指定されているかを確認してみると/var/lib/pgsql/dataが指定されていることがわかります。
データディレクトリの場所を変更したければ、この項目を修正します。ここでは変更せずに進めます。

% cat /usr/lib/systemd/system/postgresql.service
・・・
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/data
・・・

指定されているデータディレクトリを作成します。

% sudo mkdir -p /var/lib/pgsql/data

所有者、所有グループをpostgresへ変更します。

% sudo chown postgres:postgres /var/lib/pgsql/data

postgresユーザへスイッチします。

% sudo -i -u postgres

postgresユーザでデータベースクラスタを初期化します。

-bash-4.2$ initdb  -D '/var/lib/pgsql/data'
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

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

ディレクトリ/var/lib/pgsql/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 32MB
設定ファイルを作成しています ... ok
/var/lib/pgsql/data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
照合順序を作成しています ... ok
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
PL/pgSQL サーバサイド言語をロードしています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ン、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。

成功しました。以下を使用してデータベースサーバを起動することができます。

    postmaster -D /var/lib/pgsql/data
または
    pg_ctl -D /var/lib/pgsql/data -l logfile start

これで準備が整いました。postgresユーザからログアウトします。

-bash-4.2$ exit

改めて起動を試みます。

% sudo systemctl start postgresql.service

状態を確認してみます。

%  sudo systemctl status postgresql.service
postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
   Active: active (running) since 日 2014-08-31 22:07:22 JST; 20s ago
  Process: 7027 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 7021 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 7031 (postgres)
   CGroup: /system.slice/postgresql.service
           ├─7031 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
           ├─7032 postgres: logger process
           ├─7034 postgres: checkpointer process
           ├─7035 postgres: writer process
           ├─7036 postgres: wal writer process
           ├─7037 postgres: autovacuum launcher process
           └─7038 postgres: stats collector process

 8月 31 22:07:22 www4242gi.sakura.ne.jp systemd[1]: Started PostgreSQL database server.

プロセスを確認してみます。

% ps auxfwww | grep postgres
shimizu   7140  0.0  0.0 112656   988 pts/0    S+   22:47   0:00              \_ grep --color=auto postgres
postgres  7031  0.0  0.5 233264  9464 ?        S    22:07   0:00 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
postgres  7032  0.0  0.0 193012  1460 ?        Ss   22:07   0:00  \_ postgres: logger process
postgres  7034  0.0  0.0 233264  1668 ?        Ss   22:07   0:00  \_ postgres: checkpointer process
postgres  7035  0.0  0.1 233264  1940 ?        Ss   22:07   0:00  \_ postgres: writer process
postgres  7036  0.0  0.0 233264  1444 ?        Ss   22:07   0:00  \_ postgres: wal writer process
postgres  7037  0.0  0.1 234088  2932 ?        Ss   22:07   0:00  \_ postgres: autovacuum launcher process
postgres  7038  0.0  0.0 193008  1672 ?        Ss   22:07   0:00  \_ postgres: stats collector process

問題ないようです。

PostgreSQLのデータベースへの接続

データベースにログインしてみます。
※デフォルトのpg_hba.confの設定ではlocalからの接続がtrust(PostgreSQLデータベースサーバに接続できる全てのユーザが、任意のPostgreSQLユーザとしてパスワードなしでログインすることを許可する)設定になっていますので、どのOSユーザからでもログインできるはずです。

% psql -U postgres
psql (9.2.7)
"help" でヘルプを表示します.

postgres=#

問題ないようです。
接続を終了するには、\qを入力します。

おわりに

CentOS 7.0へPostgreSQL 9.2のRPMパッケージをインストールしてからPostgreSQLを起動して接続するまでの基本的な手順を記載しました。systemdはまだよく分かりません。

参考

0 Comments:

コメントを投稿