CentOS6でPostgreSQLの初期起動時にUse "service postgresql initdb" to initialize the cluster first.と表示されてPostgreSQLが起動できないときの対処法

答えは画面に表示されています。そのまんま

postgres01

#service postgresql initdb

としてデータベースを初期化してから

#/etc/init.d/postgresql start

としてやると無事起動します。

何度か通ったことのある道のような気がするけど
覚書になかったので書き留めておく。

CentOS6でPostgreSQLの初期起動時に「/var/lib/pgsql/data is missing.」とエラーが表示されるときの対処法

今、新しくリリースされたCentOS6をいろいろといじっているところで、PostgreSQLの初期設定でつまずいたので覚書。

うる覚えだけど、CentOS5のときは

#/etc/init.d/postgresql start

と入力すると

データベースを初期化中:

と表示された気がするがCentOS6ではちと違うらしい。

そのままでは、「/var/lib/pgsql/data is missing. Use ” service postgresql initdb” to initialize the cluster first」とエラーが表示される

ぐぐる君に聞いてみると
最初にクラスタを初期化する”サービスのpostgresql initdbを”使用(してください。)とのことw。

# service postgresql initdb

と入力すると

データベースを初期化中:    [ OK ]

と表示され

#/etc/init.d/postgresql start    [ OK ]
postgresql サービスを開始中:    [ OK ]

となり、無事に起動できる。

(´ε`;)ウーン…それにしても、CentOS6の情報なさすぎ・・・(ノД`)シクシク。

参考サイト : ryusendo

http://wiki.ryusendo.net/index.cgi?page=PostgreSQL

PostgreSQLでMySQLのauto_incrementを実現する方法

MySQLで「id」のカラムによく設定される「auto_increment」いわゆるオートナンバーというやつで自動的に1、2、3、と数字を振ってカラムに入力してくれる機能ですが、同じデータベースだからPostgreSQLでも同じやり方すりゃいいだろ?っと思いたいところですが、なかなかそう都合よくはいかないもの。

まぁMySQLとPostgreSQLは全く別物なので当たり前といえば当たり前の話。

では、PostgreSQLでMySQL の「auto_increment」と同機能の設定をカラムに設定するにはどうすればいいのか?

「シーケンス」というものを用意します。

MySQLはカラム自体にその機能を持たせますが(本当は違うのかもしれないが・・・)、PostgreSQLではシーケンスで、1から始まって1ずつ増えていく数値を発生させそれを「id」のカラムに入れてやるということをします。

ちなみに100から始まって5ずつ増やしてという設定も出来ます。

では、phpPgAdminの画面で

phpPgAdminシーケンス

テーブルの下の下に「シーケンス」という項目があるのでそれをクリックすると、右のコンテンツ部分のした方に「シーケンスを作成する」というのがあるのでそれをクリックします。

phpPgAdmin シーケンスを作成する

名前のところに分かりやすい名前をつけて「作成」を押すと出来上がりです。

ちなみにここで「増加数」や「開始値」を設定できるので5ずつ増やしたいとか、1000から始めたいといったことも可能ですが、それは特殊なケースでしょう。普通にデータベースを扱うなら1から始まり1ずつ増えてけば問題ないはず。その設定はデフォルトで設定されます。なので名前だけ設定しておっけーというわけです。

phpPgAdmin 作成したシーケンスの内容

作成したシーケンスの内容が表示されます。設定したのは名前だけですがデフォルトで上記のように設定されます。ここまでが第一段階。これを「id」のカラムに関連付けします。

カラム「id」に作成したシーケンスを関連付け

では「id」カラムを変更として上のような画面になったら「デフォルト」の欄に

nextval(‘test01_seq’::regclass)

と設定します。「test01_seq」というのは作成したシーケンスの名前です。設定後に実際にダミーデータを入力してみて1、2、3と数字が振られればばっちりです。

PostgreSQLのダンプとリストア

データベースのダンプ(バックアップ)、リストア、もしくは移動等の方法。

コマンドラインより

#su -postgres

でpostgreSQLに入り

-bash-3.2$

と表示されているところで

pgdump -U postgres -f backpu01.db databasename

-U はユーザー名指定

-f はファイル名指定

最後の「databasename」はバックアップするデータベースの名前をここに入れる

すると

PostgreSQLのデフォルトインストールフォルダの

「/var/lib/pgsql/」に-f backpu01.dbと指定した「backup01.db」というファイルが出来ます。

これでダンプ(バックアップ)完了です。

ここでダンプするサーバーとリストアするサーバーの文字コードが違う場合はLinuxでは大抵標準装備されているらしい「文字コード変換ツール」を使ってリストアする方の文字コードに合わせて変換してあげます。

コマンドラインで

#nkf -w <backup01.db> backup02.db

といった風に変換してやります。

-e : EUCコードに変換
-s : Shift-JISコードに変換
-w : UTF-8コードに変換
コマンドの詳細を調べたい時には「linux nkf」でググると解説サイトが見つかります。

では、今度はリストア

ダンプ同様

#su -postgres

でpostgreSQLに入り

-bash-3.2$

と表示されているところで

createdb -U postgres newdatabase

として空のデータベースを作ります。それから

psql -U postgres -d newdatabase -f backpu01.db

-U はユーザー名指定

-dはデータベース指定

-f はファイル名指定

これで内容の同じデータベースが出来ているはず。

phpPgAdminのインストールと設定

PostgreSQLをGUIでデータベースを作成したりテーブルを作成したりできるWEBツールの「phpPgAdmin」のインストールと初期設定の方法です。

まず、公式サイト「http://phppgadmin.sourceforge.net/」へ行き

phpPgAdmin公式サイト

「download」をクリックして

ファイルをダウンロード

お好みでどれを選んでもかまいません。どれかひとつダウンロードしてきます。

ダウンロードしてきたファイルを解答してフォルダをわかりやすい名前にリネームします。今回は「phppgadmin」とします。

そのフォルダをWEBサーバーのルートフォルダ、CentOS5では「/var/www/html/」の下に「phppgadmin」を置くので「/var/www/html/phppgadmin」という形になります。

アクセスは「www.exsample.com」を例にとると「www.exsmple.com/phpphadmin」でログイン画面にアクセスします。すると

phpPgAdminログイン画面

こんな画面が現れます。

ここからはいろいろなやり方があるかと思いますが、自宅サーバーを想定し、データベースを作成してテーブルを設定してしまえば、ほぼ用事がなくなるので、そうそうアクセスすることもないでしょうし、万が一一般公開してデータベースをいじらても困るのでアクセスはapacheの設定でサーバーと同じLAN内のみに限定します。最悪、どうしても外からデータベースを操作したい場合はVNCサーバーでアクセスしてリモートデスクトップにてphpPgAdminのログイン画面にアクセスするという前提で話をします。

apacheの「/etc/httpd/conf/httpd.conf」を編集し、ルートディレクトの設定がしてあるあたり

<Directory />
Options FollowSymLinks
AllowOverride All
Order Deny,Allow
Deny from all
</Directory>

の下あたりに下記のように追記します。

<Directory “/var/www/html/phppgadmin”>
DirectoryIndex index.php
Order Deny,Allow
Deny from all
Allow from 192.168.1
</Directory>

ホストと同じLAN内からしかアクセスできませんよっという設定です。

そして、phpPgAdminの初期設定ではスーパーユーザーである「postgres」ではログインできないのでそれを解除します。

「/var/www/html/phppgadmin/」がphpPgAdminをインストールしたフォルダなのでその下の「/var/www/html/phppgadmin/conf/config.inc.php」を編集します。

73行目あたりの

$conf[‘extra_login_security’] = true;

true を falseに変更して

$conf[‘extra_login_security’] = false;

として再起動してからアクセスしなおして「postgres」でログインしてやりたい放題できます。

先程のapacheの設定でLAN内からしかphpPgAdminのログイン画面にアクセスできないのでセキュリティ面は問題ないでしょう。