2011年12月15日木曜日

Linux Mint (PostgreSQL initdb)

こんにちは。 先日から, Linux Mint で PostgreSQLを使い始めましたが, 早速つまづきました。
Synaptic からインストールを行うと, locale を OSのlocale で指定されてしまったり, データベースクラスタが自動的に作られてしまいます。
そこで, データベースクラスタを再度 --no-locale オプションで作ったり, データベースクラスタを移動させたりしたいわけですが, 標準状態では, initdb などのコマンドが使えません。

そこで, ある程度カスタマイズしないといけないのです。 Ubuntuでもたぶん一緒です。
(Let's postgreさんのWebサイトが非常に参考になりました)
1.  initdb コマンド
>  whereis initdb
initdb: /usr/share/man/man1initdb.1.gz

とありますが
> initdb
initdb: command not found
と「ないよ」と言われます。

initdb コマンドは
/usr/lib/postgresql/9.1/bin 
にあります。PATHはとおっていません。
ここにパスを通してもいいですがpsqlなどのコマンド同様シンボリックリンクでも貼っておきましょう。

ln -s /usr/lib/postgresql/9.1/bin/initdb  /usr/bin/initdb

これで, 使用できるようになりました

※psql などは, pg_wrapper  というコマンドになっており, これのシンボリックリンクとなりデフォルトで使用できます


2.  PostgreSQL サーバーの停止
/etc/init.d/postgresql  を使って停止させます。(ただし, postgresユーザで)
このファイルの権限は, デフォルトで 700 になっているので, postgresユーザにも権限を
与える必要があります。(777など, あまりよくないですが)

> su -
> chmod 777 /etc/init.d/postgresql
> su postgres
> /etc/init.d/postgresql stop

データベースが止まりました。

※止めるときは, root でもいいみたいです。(スタートはだめでした)


3.  データベースクラスタの削除
デフォルトでは,  /var/lib/postgresql/9.1/main   です
main 以下をざっくり削除しましょう。

> su -
> rm -rf /var/lib/postgresql/9.1/main
> mkdir main

mainは空のディレクトリとして戻しましょう

4.  データベースクラスタの構築
postgres ユーザになって, initdb コマンドを実行しましょう

> su -
> su postgres
> initdb -D /var/lib/postgresql/9.1/main --no-locale

これで, main 以下にデータベースクラスタができました。


5.  SSLコネクションの設定
4まででデータベースクラスタの構築は終了ですが, このままでは スタートおよび接続が
できません。 理由は, データベースにTCP/IP接続する際の, セキュリティ設定が足りないと
怒られてしまうからです。

元々データベースクラスタ内にあった設定どおりに, サーバーkey の設定を行います。
サーバーkeyは別の場所にあるので, そこへシンボリックリンクをはります

>cd /var/lib/postgresql/9.1/main
>ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
>ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
これで完成です。
> /etc/init.d/postgresql start

でPostgreSQLを起動しましょう。



※おまけ
pg_ctl  を使うには, pg_ctl のシンボリックリンクをこのようにはります。

ln -s /usr/lib/postgresql/9.1/bin/pg_ctl  /usr/bin/pg_ctl


これでどこからでも pg_ctl が利用できます。
ただし, pg_ctl は $PGDATA を使うので $PGDATA を使うか, -D オプションで データベースクラスタのディレクトリを指定します。

下記は, pg_ctl でstatusを調べた例です

ex)  $PGDATA 設定
export $PGDATA=/var/lib/postgresql/9.1/main
pg_ctl status

ex) -Dオプションで
pg_ctl -D /var/lib/postgresql/9.1/main status

0 件のコメント:

コメントを投稿