http://www.postgresql.org/からダウンロードします。ftp://ftp.jp.postgresql.org/v7.4.6/からpostgresql-7.4.6.tar.gzをダウンロードしました。2005/7/6現在8.0.3が出てますので、それも同じようにインストールしました。まず解凍します。またpostgresql用のユーザを作っておきましょう。
useradd postgres
ではコンパイルしていきます。
./configure --enable-multibyte=EUC_JP --with-perl --with-java
これでEUC_JPで日本語が扱え、perl,javaを操作するためのモジュールがインストールされます。 8.2.4では、
./configure --enable-nls=ja --with-perl --with-openssl
としました。--enable-nls=jaでエラーが出る場合は、 http://www.gnu.org/software/gettext/よりgettextをインストールしておきます。
wget ftp://mirrors.kernel.org/gnu/gettext/gettext-0.17.tar.gz tar xzvf gettext-0.17.tar.gz cd gettext-0.17 ./configure make make install
ではpostgesの続きです
make all make install
またインストールは/usr/local/pgsqlにされてますので、先ほど作ったユーザに変更しておきます。
chown -R pgsql:pgsql /usr/local/pgsql
では環境変数の設定です。.bashrcとか/etc/profileにでもいれておきます。
export PATH="$PATH":/usr/local/pgsql/bin export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=$POSTGRES_HOME/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
追加したら、sourceコマンドで反映させておいてください。では初期化です。
su - postgres initdb --encoding=EUC_JP
や
initdb -D /usr/local/pgsql/data -E utf8
このときwhichでinitdbの場所を確認しておいてください。すでにインストールされている場合は、別のパスを見に行く可能性があります。また、postgresのユーザもすでに作成されているかもしれないので、.bashrc等のファイルは確認しておいてください。
pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg.log start
てな感じで
-D datadirデータの場所です。省略した場合は、環境変数PGDATAが使われます
-o optionspostmasterに渡すオプションを指定します。"か'でくくってください。
-l filenameログの名前を指定します。
-sエラーメッセージのみを表示します。
-p pathpostmasterの場所を指定します。デフォルトではpg_ctlと同じディレクトリです。
-B buffersサーバプロセスが使用する共有バッファの数をです。デフォルトでは64buffersで、1buffersは8kBです。
-iクライアントとTCP/IPで接続できます。ない場合にはローカル接続のみです。ただpg_hba.confに記述がないと接続できません。
-p port接続用のポートです。指定がない場合は、5432です。
-Sサイレントモードで起動します。
statusステイタスが表示されます。これはプロンプトで使用してください。
#! /bin/sh # chkconfig: 2345 98 02 # description: PostgreSQL RDBMS # This is an example of a start/stop script for SysV-style init, such # as is used on Linux systems. You should edit some of the variables # and maybe the 'echo' commands. # # Proper init scripts on Linux systems normally require setting lock # and pid files under /var/run as well as reacting to network # settings, so you should treat this with care. # Original author: Ryan Kirkpatrick # $Header: /cvsroot/pgsql-server/contrib/start-scripts/linux,v 1.3 2001/07/30 14:52:42 momjian Exp $ ## EDIT FROM HERE # Installation prefix prefix=/usr/local/pgsql # Data directory PGDATA="/usr/local/pgsql/data" # Who to run pg_ctl as, should be "postgres". PGUSER=postgres # Where to keep a log file PGLOG="$PGDATA/serverlog" ## STOP EDITING HERE # Check for echo -n vs echo \c if echo '\c' | grep -s c >/dev/null 2>&1 ; then ECHO_N="echo -n" ECHO_C="" else ECHO_N="echo" ECHO_C='\c' fi # The path that is to be used for the script PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # What to use to start up the postmaster DAEMON="$prefix/bin/pg_ctl" set -e # Only start if we can find pg_ctl. test -f $DAEMON || exit 0 # Parse command line parameters. case $1 in start) $ECHO_N "Starting PostgreSQL: "$ECHO_C su - $PGUSER -c "$DAEMON start -o '-i' -D '$PGDATA' -s -l $PGLOG" echo "ok" ;; stop) echo -n "Stopping PostgreSQL: " su - $PGUSER -c "$DAEMON stop -D '$PGDATA' -s -m fast" echo "ok" ;; restart) echo -n "Restarting PostgreSQL: " su - $PGUSER -c "$DAEMON restart -o '-i' -D '$PGDATA' -s -m fast -l $PGLOG" echo "ok" ;; status) su - $PGUSER -c "$DAEMON status -D '$PGDATA'" ;; *) # Print help echo "Usage: $0 {start|stop|restart|status}" 1>&2 exit 1 ;; esac exit 0
接続を制御します。最初はlocalしか接続を許可されていません。これをローカルネットワークのみ接続できるようにしてみます。/usr/local/pgsql/data/pg_hba.confを編集します。
host all all 192.168.1.0 255.255.255.0 trust
これは左から順に
TYPE,DATABASE,USER,IP_ADDRES,IP-MASK,METHOD
になってます。
TYPE localの場合は、ロカール(UNIXドメインソケット)接続で、hostはTCP/IP接続 DATABASE allですべて USER allですべて IP_ADDRES 対象のIP IP_MASK 対象のmask METHOD trust 無条件に接続を許可する。ユーザー認証はユーザー名のみを使用 md5 パスワード認証を行う。pg_shadowに登録されている暗号化パスワードを使用する。 crypt パスワード認証を行う。pg_shadowに登録されている平文パスワードを使用する。 regect 接続拒否
それではだめな場合は、8.0の場合postgresql.confの
listen_addresses = '*'
にしてみましょう。
これらはpostgresユーザになっておこなってください。
psql -l
データベース一覧表示
createdb データベース名
データベース作成
dropdb データベース名
データベース削除
psql データベース名
データベース接続
pg_dump dbname > /backup/backupfile
バックアップ
psql dbname < /backup/backupfile
リストア dropdbで削除してから。
createuser
ユーザを作成します。-Pでパスワードのプロンプトを表示します。-dでデータベース作成許可、-Dはデータベース作成禁止です。-aはユーザ作成許可、-Aはユーザ作成不許可です。
ユーザpostgresqlになってpsql databaseでログイン後行ってください。\qで終了です。
ユーザ一覧の表示
select usename from pg_user;
ユーザ作成
CREATE USER user WITH PASSWORD 'password';
パスワード変更
ALTER USER user WITH PASSWORD password';
ユーザ削除
DROP USER user
\df 関数一覧 \dt テーブル一覧 \dT 型の一覧 \l データベース一覧
PostgreSQLデータベースの掃除と解析をおこなってくれるコマンドです。
vacuumdb test
データベースtestをvacuumします。
ちゃんとインデックスを使っているか見ておきましょう。
EXPLAIN sql; EXPLAIN ANALYZE sql;
ANALYZEをつけていると実際に実行されます。後はVACUUM ANALYZEもしてみて統計情報の更新をしておきます。
http://pgfoundry.org/projects/psqlodbc/
http://www.postgresql.org/ftp/odbc/versions/msi/
http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html