* PostgreSQL [#r907177a]

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

** はじめに [#z88b7a3b]

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

-[[PostgreSQL:http://www.postgresql.org/]]
-[[日本 PostgreSQL ユーザー会:http://www.postgresql.jp/]]

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

[[Red Hat:http://www.redhat.com/]] が Red Hat Linux と PostgreSQL を合わせた
[[Red Hat Database:http://www.redhat.com/products/software/database/]]
を売り出しています。

** インストール [#k94facb6]

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

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

適当なミラー,たとえば [[Ring Server:http://www.ring.gr.jp/]] の
[[/archives/misc/db/postgresql/:http://www.t.ring.gr.jp/archives/misc/db/postgresql/]]
[[/archives/misc/db/postgresql/:http://www.dnsbalance.ring.gr.jp/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

** 起動 [#nb75f5c6]

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

** ユーザ作成 [#r708d0e7]

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

しておけば安心です。

** 使い方 [#r99fbfca]

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

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

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

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

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

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

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

 psql -h ホスト名 -l

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

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

GNU readline ライブラリが日本語化されていないと日本語が化けます。
そのようなときは readline をオフにするオプション -n
を付けるか,
[[GNU readline ライブラリ日本語化パッチ:http://www.h2.dion.ne.jp/~yamaga/readline-j/]]
を参照してください。
Vine Linux のものは日本語化されています。

後はマニュアルをよく読んで使いましょう。
doc ディレクトリに postgres.tar.gz という HTML のマニュアルが入っています。
[[日本語のマニュアル:http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/]]
も公開されています。

** Moodle で使う場合 [#d980bb8b]

最初の設定(例)

 createuser -P moodle
 createdb moodle

バックアップ(例)

 pg_dump moodle >moodle.out

リストア

 psql moodle <moodle.out

** SSH での接続 [#bc50b600]

/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

** その他のリンク [#q0b77185]

-[[PostgreSQL ODBC Driver 日本語版:http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html]]
-[[UNIX データベース入門:http://www.wakhok.ac.jp/DB/DB.html]]
(稚内北星学園(短期)大学の丸山不二夫先生が1994年に書かれたものです)
-[[PostgreSQL vs. MySQL (Web Techniqhes, Sep 2001):http://www.webtechniques.com/archives/2001/09/jepson/]]

** Solaris の場合 [#l4cae9bb]

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

という設定でコンパイルしたものです。
- [[JPUG広報担当blog>http://blog.postgresql.jp/]]は、チューニング、SQL最適化、トランザクション処理、レプリケーションなどなど為になる情報満載です。 -- sawada &new{2006-05-06 (土) 12:40:42};

#comment