CentOS5のデフォルトリポジトリでは、PostgreSQL8系(8.1(postgresql)と8.4(postgresql84))しかインストールできません。
ということで、9.0をインストールする方法をメモします。
(今回は9.0ですが、PostgreSQLのサイトでは8.3等、各バージョンのリポジトリが用意されているので、リポジトリが提供されている他のバージョンも基本このやり方でインストール出来ると思います)
PostgreSQLに関しては、PostgreSQLのリポジトリが用意されているようなので、まず、postgresql用のリポジトリを利用できるように、postgresqlのサイトからreporpmsをインストールします。
(今回はCentOS5 x64用のRPMですが、http://yum.postgresql.org/reporpms/から各OS用のreporpmsを入手できます)
CentOSのリポジトリファイルを修正し、postgresql8系のパッケージがインストールされないようにします。
[base]
...
exclude=postgresql* ←追加
...
[updates]
...
exclude=postgresql* ←追加
...
postgresql9.0用のリポジトリファイルを開き優先度を2にします。
[pgdg90]
priority=2 ←追加
これでpostgresql9.0リポジトリが利用できるようになったので、yumを使ってインストールします。
自動起動をONにします。
まず、データベースの初期化を行います。
サービスを開始します。
これで使えるようになったのですが、デフォルトではローカルからのアクセスしか出来ません。
なので、管理者権限をもつユーザを追加して、ネットワーク越しに使えるようにしてみます。
まずユーザの追加ですが、postgresになり、createuser コマンドでユーザを追加します。
$ createuser ユーザ名
新しいロールをスーパーユーザにしますか? (y/n)y ←スーパーユーザにするかどうか聞いているので今回はyにします。
新しいユーザのパスワードを決めてやります。
$ psql ←postgresqlに接続します。
後は、ネットワーク越しにアクセスするように設定します。
listen_addresses と port のところがコメントアウトになっているので、全ホストから受け入れするように以下のように設定します。
listen_addresses = '*'
port = 5432
これで、クライアントPCのpgAdminIIIを入れてつないでみたんですが、以下のようなエラーになりました。
Error connecting ont the server:FATAL: pg_hba.conf にホスト"xxx.xxx.xxx.xxx"、ユーザ"hoge"、データベース"postgress,SSL無効用のエントリがありません
調べてみると、pg_hba.confにもアクセス許可の設定が必要なようです。
pg_hba.confでは、HBA(host-based authentication)というホストベース認証の設定を書いているようです。
簡単に説明すると、接続、ユーザ、アクセス元別にユーザ認証の設定を行います。
TYPEが接続方式(local:Unixソケット,host:TCP/IP等)、DATABASEが接続を許可したいデータベース名、USERが接続を許可するユーザ名、CIDR-ADDRESSが接続を許可するネットワーク、METHODがユーザ認証の方式(ident:Linuxユーザ認証、trust:無条件接続許可、reject:接続拒否、md5:md5を使ったパスワード認証、passwd:平文のパスワード認証)という意味のようです。
今回、hostのIPv4の部分を以下のように修正しました。
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 ident
↓
host all all 0.0.0.0/0 md5
これでどの端末からアクセスできるような設定になりました。
後は、サービスを再起動して実際にpgAdminIIIでアクセスをしてみます。
いざpgAdminIIIでアクセスしてみると、ログインはできたんですが、データベースを展開しようとすると、以下のようなエラーが。。。
エラーが起こりました:
ERROR: 列"datconfig"は存在しません
LINE 1: ...b.dattablespace AS spcoid, spcname, datallowconn, datconfig,...
頭を悩ました結果、答えがhttp://postgresql.1045698.n5.nabble.com/BUG-5668-initdb-failed-to-create-postgres-database-td2847489.htmlに有りました。
pgAdminIIIのv1.8.4を使っていたんですが、これが古いのでpostgresql9.0に対応してないのです。
なんで、1.8.4を使ってしまったのかというと、pgAdminダウンロードサイトのソート順に引っかかってしまったのです。
改めて最新版のv1.14.3をインストールしたら、正常にデータベースにアクセスできました。
参考:
CentOS5.5へPostgreSQL9.0をyumでインストールする - bose999の試験管の中の話
CentOS 5.6 へ PostgreSQL 9.0 の RPM をインストール - Try and Error and Error
PostgreSQL ユーザー追加 - ORANGE BOX
他ホストから接続するための設定
[Linux] PostgreSQLをリモートからアクセスできるように設定する Web Sytem | AIDREAM
[ PostgreSQL IDENT認証] by へうげもの