PostgreSQL

下の方は古い記述が残っています。

はじめに

PostgreSQL(ポストグレス・キュー・エル)はオープンソースのデータベースソフトです。 詳細は次の場所をご覧下さい。

PostgreSQL の読み方は上の米国のサイトにサウンドクリップがあります。 POST-gres-QUEUE-ELL のように聞こえます。

Red Hat が Red Hat Linux と PostgreSQL を合わせた Red Hat Database を売り出しています。

インストール

現在は rpm や apt-get で簡単にインストールできます。

以下は Vine Linux にソースからコンパイルしてインストールした記録です。

適当なミラー,たとえば Ring Server/archives/misc/db/postgresql/ の中から最新のソース(たとえば postgresql-7.4.5.tar.bz2)をいただいてきて展開します。

Vine Linux 3.0 では readline-devel を入れないと configure でエラーになりました。

./configure
make
make install

/etc/ld.so.conf に /usr/local/pgsql/lib と書いて /sbin/ldconfig を実行しておきます。

データベースの管理者/グループ postgres/postgres を作っておきます。 たとえば /etc/passwd にば例えば次のように書きます:

postgres:x:130:130:PostgreSQL Server:/home/postgres:/bin/bash

/etc/group には対応する番号を書き込みます:

postgres:x:130:

postgres さんのホームディレクトリの .bashrc に次のように書いておきます。

PATH=/usr/local/pgsql/bin:$PATH
MANPATH=/usr/local/pgsql/man:$MANPATH
PGLIB=/usr/local/pgsql/lib
PGDATA=/usr/local/pgsql/data
export PATH MANPATH PGLIB PGDATA

また,.bash_profile には次のように書いておきます。

. ~/.bashrc

これと同じ環境変数の設定はデータベースを使う人もやっておきます。

/usr/local/pgsql/data というディレクトリも作り,postgres のものにしておきます(パーミッションは 700 とか)。

これで postgres になってデータベースを初期化します。

su - postgres
initdb

うまくいけば次のようなメッセージが出ます。

Success. You can now start the database server using:

    /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
    /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

/usr/local/pgsql/data ディレクトリの下にいろいろなファイルが作成されます。

まず,この中の postgresql.conf を適宜修正します。

一番重要なのは,たいていの場合(ネットワーク経由で使う場合),

#tcpip_socket = false

となっているところを

tcpip_socket = true

とする必要があることです。

あとは,最大の接続数 max_connections は100になっていますが,大勢が同時に使う場合は適宜増やし,shared_buffers を少なくともその倍にします。 バッファ一つあたり 8K バイトのメモリを使います。

また,/usr/local/pgsql/data/pg_hba.conf は,他ホストからの接続を許す場合,例えば 192.168.*.* からの接続を許し,認証に平文パスワードを使うには,次の行を追加します:

host all all 192.168.0.0 255.255.0.0 password

起動

Red Hat 系なら root になってソースツリーの中で次のようにしておくと便利です。

cp contrib/start-scripts/linux /etc/rc.d/init.d/postgres
chmod 755 /etc/rc.d/init.d/postgres

これで /etc/rc.d/init.d/postgres start とすると起動します。

システム起動時に自動起動するには次のように打ち込んでおきます。

/sbin/chkconfig --add postgres

ユーザ作成

postgres になって okumura というデータベースユーザを作っておきます。 同じ名前の UNIX ユーザがいなくてもかまいませんが,一致させておくほうが便利です。 もちろんパスワードは一致させる必要はありません。

createuser -P okumura
Enter password for user "okumura": hoge
Enter it again: hoge
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

作ったユーザを消すコマンドは dropuser です。

じつは createuser は次と同じことをするシェルスクリプトです。

psql template1
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# create user okumura with password 'hoge';
CREATE USER
template1=# \q

パスワードを変更するには create user の代わりに alter user とします。

psql template1
alter user postgres with password 'hoge';

のようにして既存ユーザにもパスワードが設定できます。 パスワードを設定したら,前述の pg_hba.conf の trust となっているところはすべて password にして,

pg_ctl reload

しておけば安心です。

使い方

上で自分の UNIX アカウントと同じ名前のデータベースユーザが作られていると仮定します。 もしそうでなければ,以下のコマンドには「-U ユーザ名」というオプションが必要です。

データベースを作るには createdb データベース名 です。 たとえば次のようにできます。

createdb test
createdb -h ホスト名 -U ユーザ名 test

データベース名を省略すると自分のユーザ名と同じになります。

消すのは destroydb データベース名 です。

データベースのコマンドによる操作は psql コマンドで行います。 これは postgres の権限で動かす必要はありませんし,同じマシンで実行する必要もありません。

まず,存在するデータベースの名前を一覧します。

psql -h ホスト名 -l

使いたいデータベース名があれば,次のようにして使います。

psql -h ホスト名 データベース名

GNU readline ライブラリが日本語化されていないと日本語が化けます。 そのようなときは readline をオフにするオプション -n を付けるか, GNU readline ライブラリ日本語化パッチ を参照してください。 Vine Linux のものは日本語化されています。

後はマニュアルをよく読んで使いましょう。 doc ディレクトリに postgres.tar.gz という HTML のマニュアルが入っています。 日本語のマニュアル も公開されています。

Moodle で使う場合

最初の設定(例)

createuser -P moodle
createdb moodle

バックアップ(例)

pg_dump moodle >moodle.out

リストア

psql moodle <moodle.out

SSH での接続

/usr/local/pgsql/data/postgresql.conf は

tcpip_socket = true

にしておきます。

また,/usr/local/pgsql/data/pg_hba.conf に 127.0.0.1 ではない自ホストの IP アドレスまたはそれを含むネットワークを書き込みます。

これで,他ホストから次のようにしてデータベースの走るホストに ssh で接続します。

ssh ホスト名 -L 5432:ホスト名:5432

同じ他ホストから次のようにしてデータベースに接続します。

psql -h localhost

その他のリンク

Solaris の場合

doc/FAQ_Solaris をまず読むことが必要。 起動スクリプトの例:

#!/sbin/sh
case "$1" in
'start')
        su postgres -c '/usr/local/pgsql/bin/pg_ctl start \
                        -D /usr/local/pgsql/data \
                        -l /usr/local/pgsql/data/serverlog'
        ;;
'stop')
        su postgres -c '/usr/local/pgsql/bin/pg_ctl stop -m fast'
        ;;
~*)
        echo "Usage: $0 { start | stop }"
        exit 1
        ;;
esac
exit 0

/usr/local/lib に libz.so などを置いている場合は,postgres の .bashrc にも

export LD_LIBRARY_PATH=/usr/local/lib

と書かなければならない。

以下はさらに古い内容

Ultra 10 (Solaris 7) にもインストールしました。

昔,このマシンに PostgreSQL の古いバージョンをインストールしたときに

postmaster -i -S

とすると共有メモリが得られないというエラーになり,パラメータをちょっと小さくして

postmaster -i -S -N 24 -B 48

のようにしたら起動できたことがありました。 そのとき,sysdef | grep SHM で設定を確認して,/etc/system に

set shmsys:shminfo_shmmax=0xffffffff

と書いてリブートすることによって共有メモリの最大値を増やしました。 おかげで今回も何とか動いているようです。 ただし,make check で opr_sanity だけ失敗します。 コンパイラは gcc-3.0.1,/usr/ccs/bin をパスの先頭にし,

./configure --enable-multibyte=EUC_JP --enable-syslog --with-CXX

という設定でコンパイルしたものです。



Last-modified: 2006-05-06 (土) 12:40:42 (5791d)