S-JIS[2003-07-19/2012-06-04]

PostgreSQL8〜9インストール

PostgreSQL8〜9のインストールのメモ。[2012-05-07]


PostgreSQL8.1のCentOSへのインストール

CentOSのyumコマンドでpostgresqlをインストールすると、2012/5/7ではPostgreSQL8.1.23がインストールされる。

# yum -y install postgresql-server

これで、psqlコマンド・postgresコマンド(旧postmasterコマンド。postmasterはpostgresへのシンボリックリンクになっている)が使えるようになる。

また、UNIXユーザーのpostgres(グループもpostgres)が作られる。

# su - postgres

$ pwd
/var/lib/pgsql

$ ls
backups  data

DBのデータの実体は/var/lib/pgsql/dataになる。


PostgreSQL8.1では、JDBCドライバーもyumでダウンロードできる。

# yum -y install postgresql-jdbc

/usr/share/java/にpostgresql-jdbc*.jarが配置される。
いくつかファイルがあるように見えるが、実体は/usr/share/java/postgresql-jdbc-8.1.407.jarで、他は全てそのファイルへのシンボリックリンク。
したがって、実際に使う際はpostgresql-jdbc.jarを指定すればいいだろう。


PostgreSQLの起動

rootユーザーにて起動する。

# /etc/init.d/postgresql start
データベースを初期化中:                                    [  OK  ]	←初回のみ
postgresql サービスを開始中:                               [  OK  ]

PostgreSQL8.4のCentOSへのインストール

CentOSにPostgreSQL8.4をインストールするには、postgresql84をyumで指定すればよい。

# yum search postgresql84

先にPostgreSQL8.1をインストールしていた場合は、事前に削除しておくのが良さそう。

# /etc/init.d/postgresql stop
# yum remove postgresql postgresql-server postgresql-libs
# yum -y install postgresql84-server

先にPostgreSQL8.1をインストールしていた場合、PostgreSQLを起動しようとしたときにエラーが出て起動できない。

# /etc/init.d/postgresql start

古いバージョンのデータベースフォーマットが見付かりました。
PostgreSQL を使う前にデータのフォーマットをアップグレードする必要があります。
より詳細な情報は (Your System's documentation directory)/postgresql-8.4.9/README.rpm-dist を見てください。

/var/lib/pgsql/dataが古いバージョンのまま残っているので、このエラーが出る。
したがって、このディレクトリーを消して作り直せばよい。

# su - postgres
$ rm -rf data
$ exit

# service postgresql initdb
データベースを初期化中:                                    [  OK  ]

# /etc/init.d/postgresql start

PostgreSQL8.4のJDBCドライバー(jarファイル)はyumではダウンロードできないので、サイトから自分でダウンロードしてくる必要がある。

  1. PostgreSQL JDBC Driverのサイトの左側のメニューのDownloadをクリックする。
  2. Supported Versionsの中から自分が欲しいバージョン(今回は8.4のJDBC4(JDK1.6用))をクリックする。

PostgreSQL9.0のCentOSへのインストール

CentOSのデフォルトのyumリポジトリーにはPostgreSQL9.0は入っていないので、yumリポジトリーに9.0を追加してインストールする。[2012-06-04]

# cd /tmp
# wget http://yum.postgresql.org/9.0/redhat/rhel-5-x86_64/pgdg-centos90-9.0-5.noarch.rpm
# rpm -ivh pgdg-centos90-9.0-5.noarch.rpm
# yum search postgresql90
# yum -y install postgresql90-server
# service postgresql-9.0 initdb
# service postgresql-9.0 start

DBの実体は/var/lib/pgsql/9.0/dataになる。


PostgreSQL9.1のCentOSへのインストール

PostgreSQL9.0のインストールと同様に、yumリポジトリーにPostgreSQL9.1を追加してインストールする。[2012-06-04]

# cd /tmp
# wget http://yum.postgresql.org/9.1/redhat/rhel-5-x86_64/pgdg-centos91-9.1-4.noarch.rpm
# rpm -ivh pgdg-centos91-9.1-4.noarch.rpm
# yum search postgresql91

要するに、http://yum.postgresql.org/9.1/redhat/を参照して自分のOSのバージョン・ビット数のpgdg〜.rpmをダウンロードしてくればいい。
(i386が32bitでx86_64が64bit)

# yum -y install postgresql91-server
# service postgresql-9.1 initdb
# service postgresql-9.1 start

DBの実体は/var/lib/pgsql/9.1/dataになる。

pg_config等の(/usr/binにシンボリックリンクが作られない)コマンドを使いたい場合は、/usr/pgsql-9.1/binをPATHに加える。

参考: tetsuyaiさんのCentOS 5にPostgreSQLをインストールする


ユーザー・DBの作成

PostgreSQLでは、ユーザーとDBにはOracleの様な密接な関係は無いので、別々に作成する。
(ただ、同じ名前にしておくと、psqlの引数を省略できる)

# su - postgres

$ createuser hishidama
新しいロールをスーパーユーザとしますか? (y/n)y

$ exit

# su - hishidama

$ createdb mydb --encoding=UTF8
$ psql mydb

mydb=# \l		←DB一覧表示

ローカルホストからのTCP/IPによる接続の許可

デフォルトでは、TCP/IP(JDBCとか)による接続が許可されていない。
ローカルホスト内でのTCP/IPによる接続を許可するには以下の様に設定する。(PostgreSQL7と同様

/var/lib/pgsql/data/pg_hba.conf
/var/lib/pgsql/9.0/data/pg_hba.conf:
/var/lib/pgsql/9.1/data/pg_hba.conf:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all         all         127.0.0.1/32          ident
                                                      ↓
host    all         all         127.0.0.1/32          trust	←trust(常に信頼する)に変更

変更したら、PostgreSQLを再起動する必要がある。

# /etc/init.d/postgresql restart
# service postgresql-9.0 restart
# service postgresql-9.1 restart

実行されたSQL文をログに出力する方法

デフォルトでは、ログ(/var/lib/pgsql/data/pg_log/postgresql-*.log)にはエラーメッセージ等しか出力されない。
(ログのファイル名は、デフォルトでは出力した曜日を表す文字が付く。月曜日の場合、postgresql-MON.log)

エラー発生時に、どのようなSQL文を実行していたかログに出力させることが出来る。

/var/lib/pgsql/data/postgresql.conf:
/var/lib/pgsql/9.0/data/postgresql.conf:
/var/lib/pgsql/9.1/data/postgresql.conf:

#log_statement = 'none'                 # none, mod, ddl, all
log_statement = 'all'                   # none, mod, ddl, all	←この設定を追加

変更したら、PostgreSQLを再起動する必要がある。

# /etc/init.d/postgresql restart
# service postgresql-9.0 restart
# service postgresql-9.1 restart

SQL文をログに出力した例


インストールへ戻る / PostgreSQLへ戻る / 技術メモへ戻る
メールの送信先:ひしだま