ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

LinuxコミュのTurboLinux 11 Server (Musasabi) で PostgreSQL 教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。貴重なスペースをお借りします。
TurboLinuxでPostgreSQLを動かしてほしい、と会社で頼まれたのですが私はLinuxやサーバーといったものを触ったことも知識もありません。皆様には十分な情報を提供し損ねることや専門用語の意味がわからないことがありご不便をおかけするかも知れませんが何とか努力しますのでどうか御教授願えたらと思いトピックを立てさせてもらいました。

http://www.turbolinux.co.jp/products/server/11s/user_guide/posgrestart.html
まずこのサイトを見てみたのですがどうも11Serverには初めからPostgreSQLがあるようなのでそれを使おうと思い、実行してみることにしました。処理はコマンドライン?(真っ暗な画面に文字だけ)で行っています。

最初にrootでログインし、初めから登録されているというpostgresにパスワードを設定しました。
# posswd postgres

そしていったんログアウトしてからpostgresでログインしました。
参考サイトを見ると初めて起動する場合はinitdbを実行しろとのことなので実行してみました。
$ /etc/init.d/postgresql initdb

するとNGが帰ってきてしまいました。内容は確か
cannot create directory '/var/lib/pgsql/data/pg_log': File exists.
こんな内容でどうやら「そのディレクトリは作れない」といっているみたいなので、調べてみたらinitdbは既にデータがある場合にはエラーを吐くらしいと見つけました。
cdコマンドで調べてみたら確かに/var/lib/pgsql/data/pg_logはありました。
そこで既に初期化処理が済んでいるのかと思い、startを実行しました。
$ /etc/init.d/postgresql start
すると先ほどのエラーメッセージとそれに続いて、もうひとつエラーメッセージが返ってきました。
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
確かこのメッセージです。

初期化ができないのに初期化をしてくれといっているのでしょうか。どこが悪いのかもわからない状態です。rootでも、
# /etc/init.d/postgresql initdb
# /etc/init.d/postgresql start
等やってみたのですが同じエラーでした。

どうすれば /etc/init.d/postgresql start を実行できるのでしょうか。
何か御存じの方、よろしければどうか御教授ください。よろしくお願いします。

コメント(16)

的外れだったら申し訳ありませんが、
/var/lib/pgsql/data/ は初期化されると作成されるディレクトリだったような気がします。

/etc/init.d/postgresql status
とした場合どのようなものが出ますでしょうか?

また

psql -l

とコマンドをたたいた時にでてくる内容を教えていただけますでしょうか。
Vine Linuxの例がTurboに当てはまるかどうか分りませんが、最近のバージョンのPostgresは殆どが自動で、/etc/init.d/postgresqlをinitかなにか、そんなパラメータで起動するだけで初期化できたような・・・

もしかしたら、/etc/init.d/postgresql startとしても、初期化が済んでいないと勝手に初期化をしてくれた気すらします。その辺は、/etc/init.d/postgresqlの中身を見てみるのがいちばん速い。

何はともあれ、いちばん信頼できるドキュメントは常に付属ドキュメントです。でも、初心者はそのドキュメントの入っているフォルダを見付けるだけで一苦労なんですが・・・

それから、エラーメッセージから考え得る原因としては、フォルダがあっても、そのフォルダのオーナーがpostgresじゃない、とか、何らかの理由でそこにファイルを生成する権限がなかったから、という可能性が高いと思われます。
> だきさん
アドバイスありがとうございます。

>/etc/init.d/postgresql status
>とした場合どのようなものが出ますでしょうか?
>また
>psql -l
>とコマンドをたたいた時にでてくる内容を教えていただけますでしょうか。

/etc/init.d/postgresql status の結果は、
postmaster is stopped
でした。

psql -l の結果は、
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PCSQL.5432"?
でした。

> ごーやーまんさん
アドバイスありがとうございます。

>それから、エラーメッセージから考え得る原因としては、フォルダがあっても、そのフォルダのオーナーがpostgresじゃない、とか、何らかの理由でそこにファイルを生成する権限がなかったから、という可能性が高いと思われます。

postgresでログインし、
cd /var/lib/pgsql/data を実行後
ls -lコマンドを実行したら
drwx------ 2 postgres postgres 4096 Jun 17 21:09 pg_log
と表示されました。
所有者がpostgresでrwxということは読み書き実行はできるということですよね?
私の勘違いでしたらすいません。

他にも何かありましたらできる限り調べますのでどうぞご教授願います。
rpm -qa |grep postgresql とかしてみて下記パッケージとか入っていますでしょうか?


postgresql-server
postgresql
compat-postgresql
postgresql-libs

> だきさん
素早い対応ありがとうございます。

>rpm -qa |grep postgresql とかしてみて下記パッケージとか入っていますでしょうか?

rootでログインしてから # rpm -qa | grep postgresql と入力した結果、

postgresql-odbc-08.02.0200.-1
postgresql-8.2.14-1
postgresql-contrib-8.2.14-1
postgresql-plperl-8.2.14-1
postgresql-python-8.2.14-1
postgresql-libs-8.2.14-1
postgresql-server-8.2.14-1
postgresql-plpython-8.2.14-1

となりました。
関係あるかわかりませんが /var/lib/pgsql/pgstartup.log というものを viコマンドで見てみました。内容は、

initdb: directory "/var/lib/pgsql/data" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/var/lib/pgsql/data" or run initdb
with an argument other than "/var/lib/pgsql/data".
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

standard in must be a tty

という感じです。


This user must also own the server process.
このユーザーは、サーバープロセスも所有しなければなりません。

この辺が何か問題なのでしょうか?
なんだ、対処法を自分で書いてるくらいなら実行しなさいよ。
> ぽじとろんさん
ご指摘ありがとうございます。

なにせLinuxなどやったこともなかったもので行動範囲(できること)が狭く、おまけに知識不足のため時間がかかってしまっています。故に少しでも皆様に情報を提示してアドバイスをいただけたらと思い書き込みました。

> なんだ、対処法を自分で書いてるくらいなら実行しなさいよ。

何をどうすればサーバープロセスを持つのか分からない(実行できない)ので調べているところです。
調べ方が甘いようなので努力します。
下記を順に行ってもだめでしょうか?

スーパーユーザになって一度下記パッケージをアンインストールしてみる。
$ rpm -e postgresql-odbc-08.02.0200.-1 \
postgresql-8.2.14-1 \
postgresql-contrib-8.2.14-1 \
postgresql-plperl-8.2.14-1 \
postgresql-python-8.2.14-1 \
postgresql-libs-8.2.14-1 \
postgresql-server-8.2.14-1 \
postgresql-plpython-8.2.14-1

再度パッケージのインストールを行う。
$ yum -y install postgresql postgresql-server postgresql-libs

下記ディレクトリができているか確認
$ ll /var/lib/pgsql/
drwx------ 2 postgres postgres 4096 5月 26 08:39 backups
drwx------ 2 postgres postgres 4096 5月 26 08:39 data

サービスの起動
$ service postgersql start
または
$ /etc/rc.d/init.d/postgresql start
データベースを初期化中: [ OK ]
postgresql サービスを開始中: [ OK ]

postgre ユーザになる
$ su - postgres

データベースができているか確認してみる
$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(3 rows)



initdb がうまくいかないようなのでいったん /var/lib/pgsql/data を削除してから initdb をやってみました。

$ rm -r data
$ initdb

その結果新しく/var/lib/pgsql/data が生成されました。
この状態で /etc/init.d/postgresql start を実行したら最初にやったときのエラーは出なくなったのですがそれでも NG を返されてしまいました。
$ /etc/init.d/postgresql start
Starting postgresql service: NG

試しに /etc/init.d/postgresql initdb を実行すると、
$ /etc/init.d/postgresql initdb
Data directory is not empty!

と出るようになりました。「Dataディレクトリはからじゃないよ」と言う事は初期化は成功したのだと判断しました。
あとは start できればいいのですが NG の理由が分からないので現在試行錯誤しています。

何かご存知の方、アドバイスやご指摘をいただければと思います。
よろしくお願いします。
下記を順に行ってもだめでしょうか?

スーパーユーザになって一度下記パッケージをアンインストールしてみる。
$ rpm -e postgresql-odbc-08.02.0200.-1 \
postgresql-8.2.14-1 \
postgresql-contrib-8.2.14-1 \
postgresql-plperl-8.2.14-1 \
postgresql-python-8.2.14-1 \
postgresql-libs-8.2.14-1 \
postgresql-server-8.2.14-1 \
postgresql-plpython-8.2.14-1

再度パッケージのインストールを行う。
$ yum -y install postgresql postgresql-server postgresql-libs

下記ディレクトリができているか確認
$ ll /var/lib/pgsql/
drwx------ 2 postgres postgres 4096 5月 26 08:39 backups
drwx------ 2 postgres postgres 4096 5月 26 08:39 data

サービスの起動
$ service postgersql start
または
$ /etc/rc.d/init.d/postgresql start
データベースを初期化中: [ OK ]
postgresql サービスを開始中: [ OK ]

postgre ユーザになる
$ su - postgres

データベースができているか確認してみる
$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(3 rows)



12のコメントを見ないままコメントを出してしまいました。。すみません。
パッケージなので initdb コマンドは使用しない方がいいかもです。
dataフォルダ消した跡initdb を行わないでサービスの起動を行えば良いのではないでしょうか。
たぶんサービス起動時にinitdbを行ってくれるはずです。

$ rm -r data
$ /etc/init.d/postgresql start
> ごーやーまんさん
> ぽじとろんさん
> だきさん

起動できました!
私の知識が浅いので確信ではありませんが原因は恐らくデフォルトの /var/lib/pgsql/data にデータが不足していたのだと思います。

結果的にはものすごく作業は少なくていいみたいです。

1.デフォルトの /var/lib/pgsql/data を削除する。
$ rm -r data

2.initdb コマンドを実行する。
$ initdb

3.root で start コマンドを実行する。
$ su
# /etc/init.d/postgresql start

4.postgres で psql -l コマンドを実行
# su - postgres
$ psql -l

これで だきさん の13コメントでのデータベースが確認できました。

3と4の作業で root で start して postgres で psql -l 実行するというのは参考になりました。
また、14コメントでの initdb をしないで起動するというのも参考になりました。

皆さんの協力のおかげで問題を解決することができたことをこの場を借りてお礼申し上げます。本当にありがとうございました。


ここからは本題とは別なのですが postgres で、
$ /etc/init.d/postgresql start
と実行すると相変わらずの NG なんです。
postgres で起動ができないのは権限や設定の問題なのでしょうか?
この疑問は自分で調べてみますがもし引き続き何かご教授いただければとても助かります。

お忙しいところご教授ありがとうございました。
ユーザでパッケージサービスの起動は基本的にはできません。
行おうと思えばできますがLinuxをいじり始めたばかりならここに労力を注ぎこむのはやめておいた方が無難です。
数学の公式のようにそういうものなんだな〜程度で今はいいかと思います。


ログインすると、残り2件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Linux 更新情報

Linuxのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。