はじめに
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
はまだよく分かりません。