* 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