PostgreSQLの初期化からデータベース接続まで
サーバにインストールされているPostgreSQLを使って、データベースの初期化から接続まで行ってみました。いくつかつまづいた箇所があったので情報展開しておきます。OSはFedora 8です。
1.サービスの起動(失敗)
サービスの起動は
# /etc/init.d/postgresql start
または
# service postgresql start
ですが、次のメッセージが表示されました。
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
PostgreSQLの初期化ができていないようです。/var/lib/pgsql/data配下を参照すると、
# ll /var/lib/pgsql/data
drwx------ 2 postgres postgres 4096 2007-09-21 05:30 ./
drwx------ 4 postgres postgres 4096 2011-04-13 17:05 ../
何も入っていませんでした。ということで初期化を行います。
2.サービス初期化
初期化はservice postgresql initdbを投入します。
# service postgresql initdb
# データベースを初期化中: [ OK ]
成功しました。/var/lib/pgsql/data配下を参照すると色々入っています。
# ll /var/lib/pgsql/data
合計 64
-rw------- 1 postgres postgres 4 2011-04-13 17:12 PG_VERSION
drwx------ 5 postgres postgres 4096 2011-04-13 17:12 base
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 global
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 pg_clog
-rw------- 1 postgres postgres 3200 2011-04-13 17:12 pg_hba.conf
-rw------- 1 postgres postgres 1460 2011-04-13 17:12 pg_ident.conf
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 pg_log
drwx------ 4 postgres postgres 4096 2011-04-13 17:12 pg_multixact
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 pg_subtrans
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 pg_tblspc
drwx------ 2 postgres postgres 4096 2011-04-13 17:12 pg_twophase
drwx------ 3 postgres postgres 4096 2011-04-13 17:12 pg_xlog
-rw------- 1 postgres postgres 15336 2011-04-13 17:12 postgresql.conf
3.サービス起動
この状態で再度サービス起動を実施します。
# service postgresql start
postgresql サービスを開始中: [ OK ]
起動しました。
4.ユーザーの作成
データベースにアクセスするユーザーmtuserを、createuserコマンドで作成します。作成にあたっては、自動的に作成されているpostgresというアカウントでログインして行いました。オプションの意味は次の通りです。
- -P:新しいユーザのパスワードのプロンプトを表示
- -no-adduser:新しいユーザが他のユーザを作成することを禁止
- --no-createdb:新しいユーザがデータベースの作成を禁止
- --no-createrole:新しいユーザがロールの作成を禁止
# su - postgres
$ createuser -P --no-adduser --no-createdb --no-createrole mtuser
Enter password for new role:
Enter it again:
CREATE ROLE
無事に作成されました。
5.データベースの作成
データベースhogeを作成します。「-owner mtuser」は、新しいデータベースの所有者となるデータベースユーザmtuserの指定です。
-bash-3.2$ createdb --owner mtuser hoge
CREATE DATABASE
作成されました。
ちなみに、データベースを削除する場合はdropdbを投入します。
-bash-3.2$ dropdb hoge
DROP DATABASE
6.データベースへの接続(失敗)
データベースとデータベースのユーザ・パスワードを設定したので、ここではMovable Typeのインストール画面から接続を試みたのですが、次のようなエラーが発生しました。
データベースに接続できませんでした。設定を見直してもう一度接続してください。
メッセージ右側にある「詳細」のリンクをクリックすると次のようなエラーでした。
Connection error: FATAL: Ident authentication failed for user "mtuser" at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320 at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320 at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320
7.pg_hba.confの修正
エラーメッセージでネット検索すると、「/var/lib/pgsql/data/pg_hba.confにあるhostの「ident sameuser」を「trust」に修正すれば良い」という情報がありましたので、次のように修正しました。「ident sameuser」はアクセスしたユーザとDBユーザが同じ名前でIDENT認証し一致したら接続。「trust」はアクセスしたユーザとDBユーザが異なっても全て許可して接続、という意味のようです。
変更前
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident sameuser
# IPv4 local connections:
host all all 127.0.0.1/32 ident sameuser
# IPv6 local connections:
host all all ::1/128 ident sameuser
変更後
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 ident sameuser
# IPv6 local connections:
host all all ::1/128 ident sameuser
修正後、サービスを再起動します。
# service postgresql restart
postgresql サービスを停止中: [ OK ]
postgresql サービスを開始中: [ OK ]
8.データベースへの再接続(失敗)
この状態で再度Movable Typeから接続を試みましたが、結局接続できませんでした。ちなみに以下のコマンドは成功します。psqlはコマンドラインでの対話型ツールです。
-bash-3.2$ psql hoge -U mtuser
Welcome to psql 8.2.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
9.pg_hba.confの再修正
もう少し調べてみると、先程修正したファイルpg_hba.confの「host」も修正しないといけないという説明をみつけたので、さらに修正しました。
変更前
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 ident sameuser
# IPv6 local connections:
host all all ::1/128 ident sameuser
変更後
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
10.データベースへの再々接続
再びサービス再起動して、Movable Typeから接続を試みたところ、成功しました。
11.参考サイト
参考サイトは以下です。ありがとうございました。
- PostgreSQLのエラー「psql: FATAL: Ident authentication failed for user "postgres"」の解消方法~コンソールでpsql -U postgresが失敗する場合~
- IDENT authentication failed for user "****"
- PostgreSQL IDENT認証
- LinuxにPostgreSQLをインストールする方法
- pg_ctlで「データベースクラスタのディレクトリではありません」というエラーになる場合の対処
- PostgreSQLをLinuxでソースコードからビルドして利用する方法
- PostgreSQLで「could not connect to server」となる場合の対処
- PostgreSQLのバックアップとリストア