2012-10-06

CentOSにPostgreSQLをインストール

yumでインストールします。
$ sudo yum -y install postgresql-server
依存関係により、

  • postgresql-server
  • postgresql-libs
  • postgresql-server

の3つがインストールされることになります。現在はバージョンは、8.4.13-1.e16_3です。

これでインストールはできているのですが、データベースサーバーが起動していないので、まだ利用することはできません。最初の起動のため、次の2つコマンドを打ちます。
$ sudo service postgresql initdb
$ sudo service postgresql start
ここで、initdbをせずにpostgresqlを起動しようとすると、次のようなエラーになります。
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [失敗]

CentOSを再起動したときにpostgresqlも自動的に起動されるように設定しておきます。
$ sudo chkconfig postgresql on

これでデータベースサーバーの起動はOKです。後は、ユーザーの設定を行います。
PostgreSQLのインストールと同時にpostgresというユーザーがつくられるようです。
$ id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
このユーザー "postgres" にパスワードを設定します。
$ sudo passwd postgres
パスワードが設定できたら、ユーザーを変更します。デフォルトでは、Ident認証という方式で認証を行うため、CentOSのユーザーとPostgreSQLのユーザーが一致していないとエラーになるようです。
$ su - postgres
後は、createdbでデータベースを作成したり、 psqlで接続したりできます。

Ident認証ではなく、パスワード認証に変更したい場合は、postgresqlにユーザーを追加した後で、設定を変更します。
postgresユーザーでパスワード認証を行いたい場合は、次のようにしてパスワードを設定します。
ALTER  USER  postgres  WITH PASSWORD  'newpassword';
という具合です。postgresユーザーは最初から存在するのでALTER USERですが、新規ユーザーを追加するのであれば代わりに、CREATE USER文を使います。

パスワード認証を行うためには、DBの設定も変更する必要があります。設定ファイルなどは、たいてい「/var/lib/pgsql/data/」以下にあるようです。今回修正するのは、
/var/lib/pgsql/data/pg_hba.conf
というファイルです。「local    all    ident」という行をコメントアウトして「local    all    password」を追加します。
#local   all         all                               ident
local   all         all                               password
これでパスワードで認証することができます。たとえばユーザーがpostgresのときに、
psql  -U  postgres
とやれば、postgresユーザーで接続できます。


DjangoからPostgreSQLに接続する場合は、データベースの設定に、django.db.backends.postgresql_psycopg2を指定します。さらに次のコマンドで必要なモジュールをインストールしなくてはいけません。
$ sudo yum -y install python-psycopg2

0 件のコメント: