随時更新
リンク切れ報告、サイト情報お待ちしています"
sawa@itnavi.com
リンクは御自由にどうぞ
|
リリース情報
2002/10/01 PostgreSQL 7.2.3 リリース
構築環境
PostgreSQL 7.1.2
Red Hat Linux 6.2J or 7.1
PostgreSQL 7.0.2での設定例
PostgreSQL 7.1での設定例
PostgreSQL 7.2.3での設定例
インストール編
1.インストールするには
データベース作成編
1.データベースを作成するには
Java編
1.JDBCドライバーを作成するには
2.[SQL Exception]No suitable driverを解消するには
3.[SQL Exception]Connection refused.を解消するには
4.[SQL Exception]Permission denied.を解消するには
運用編
1.ユーザを作成するには
2.POSTMASTER(デーモン)を起動するには
3.テーブル定義を抽出するには
4.Accessからアクセスするには(ODBC)
5.バックアップおよびバージョンアップするには
6.vacuum(データベースの不要領域の掃除と統計情報の生成)するには
インストール編
Q.インストールするには
A.
sra.co.jpよりpostgresql-7.1.2.tar.gzをダウンロードします。
1.postgresユーザを追加する
useradd postgres
2.インストールディレクトリを作成する
postgresユーザが書き込めるように設定する。
(sourceを展開するディレクトリは適宜変更する)
# mkdir /usr/local/src/postgresql-7.1/
# chown postgres:postgres /usr/local/src/postgresql-7.1/
# mkdir /usr/local/pgsql
# chown postgres:postgres /usr/local/pgsql
|
2.プロファイルの設定
~postgres/.bash_profile
PATH="$PATH":/usr/local/pgsql/bin
PG=/usr/local/pgsql
export PGLIB=$PG/lib
export PGDATA=$PG/data
export MANPATH="$MANPATH":$PG/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB
|
JDBCドライバーを使用するなら下記の環境変数も設定しておきます。
その場合、ANTとJDKは必要です。インストールは、ApacheでTomcatするを参照してください。
export ANT_HOME=/usr/local/src/jakarta-ant
export JAVA_HOME=/usr/local/jdk1.3.1
export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
export CLASSPATH=/usr/local/src/jakarta-ant/build/lib/ant.jar\
:/usr/local/src/jaxp-1.1/jaxp.jar:/usr/local/src/jaxp-1.1/crimson.jar\
:/usr/local/src/jaxp-1.1/xalan.jar
|
3.インストール
※initdbはrootで実行しない。
JDBCドライバーを使用するなら、configure に --with-java オプションを指定する。
# su - postgres
$ cd /usr/local/src/postgresql-7.1/
$ tar xfvz postgresql-7.1.2.tar.gz
$ cd postgresql-7.1.2
$ ./configure --enable-multibyte=EUC_JP --with-java
|
/usr/local/src/jakarta-ant/bootstrap/bin/ant: /usr/local/src/jakarta-ant/bootstrap/bin/ant: Permission denied
が出るので
$ su
# chmod go+r /usr/local/src/jakarta-ant/bootstrap/bin/*
# exit
|
で読み取り権限を付加します。
$ make
$ make check
$ make install
$ initdb
This database system will be initialized with username "postgres".
This user will own all the data files and must also own the server process.
Creating directory /usr/local/pgsql/data
Creating directory /usr/local/pgsql/data/base
Creating directory /usr/local/pgsql/data/global
Creating directory /usr/local/pgsql/data/pg_xlog
Creating template1 database in /usr/local/pgsql/data/base/1
DEBUG: database system was shut down at 2001-04-24 07:51:35 JST
DEBUG: CheckPoint record at (0, 8)
DEBUG: Redo record at (0, 8); Undo record at (0, 8); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 16384
DEBUG: database system is in production state
Creating global relations in /usr/local/pgsql/data/global
DEBUG: database system was shut down at 2001-04-24 07:51:43 JST
DEBUG: CheckPoint record at (0, 108)
DEBUG: Redo record at (0, 108); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 17199
DEBUG: database system is in production state
Initializing pg_shadow.
Enabling unlimited row width for system tables.
Creating system views.
Loading pg_description.
Setting lastsysoid.
Vacuuming database.
Copying template1 to template0.
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
|
$ vi /usr/local/pgsql/data/postgresql.conf
|
7.0までは、postmaster.opts.defaultにpostmasterの起動オプション設定していたが、7.1からは、$PGDATA/postgresql.conf ファイル一つに設定の記述が行える。
postmaster -S -iと同じ設定にするにはpostgresql.confファイルに下記の設定する。
tcpip_socket = on
silent_mode = on
|
$ postmaster &
[1] 8507
$ kill 8507
bash: kill: (8507) - No such pid
[1]+ Done postmaster
|
postmasterの自動起動の設定をする。
/etc/rc.d/init.d/postgres にスクリプトを作成します。
#!/bin/sh
#
# postgres - This script is used to start/stop
# the postgreSQL listener process.
#
# Usage
#
# You can use this script manually, and/or you
# can install this script into the runlevel system
# by running "sh postgres.init.sh install"
#
# Credits
#
# Thomas Lockhart
# modified from other startup files in the
# RedHat Linux distribution
#
# Clark Evans
# cleaned up, added comments, etc.
#
# modified for PostgreSQL book written by Tatsuo Ishii
#
# RedHat Stuff
#
# chkconfig: 345 85 15
# description: Starts and stops the PostgreSQL backend daemon\
# that handles all database requests.
# processname: postmaster
#
# Config Variables
#
PGACCOUNT="postgres"
#
# The non-root user account which will be used to run the
# PostgreSQL executeable. For this script to work, the
# shell for this account must be SH/BASH.
#
PGDATA="/usr/local/pgsql/data"
POSTMASTER="/usr/local/pgsql/bin/postmaster"
PG_CTL="/usr/local/pgsql/bin/pg_ctl"
#
# The executable program which is to be run, in this case
# it is the listener, which waits for requests on the port
# specified during configuration.
#
# Source function library.
. /etc/rc.d/init.d/functions
#
# See how we were called.
#
case "$1" in
start)
echo -n "Starting postgres: "
su - $PGACCOUNT -c "$POSTMASTER -D $PGDATA"
echo
touch /var/lock/subsys/postgres
;;
stop)
echo -n "Stopping postgres: "
$PG_CTL -m f -D $PGDATA stop
echo
rm -f /var/lock/subsys/postgres
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
|
# chmod 755 /etc/rc.d/init.d/postgres
# chkconfig --add postgres
# chkconfig --list | grep postgres
postgres 0:off 1:off 2:off 3:on 4:on 5:on 6:off
|
chkconfigでは、各ランレベルにK15postgres、S85postgresが作成される。
/etc/rc.d/init.d/postgres start でpostmasterの開始、/etc/rc.d/init.d/postgres stopでpostmasterが停止される。
データベース作成編
1.データベースの作成
$ createdb testdb
CREATE DATABASE
|
SQL文の場合、
CREATE DATABASE <データベース名>
[ WITH LOCATION = '<配置>' ]
[ ENCODING = '<エンコーディング名>' ]
2.テーブルの作成
$ psql testdb
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
testdb=# CREATE TABLE testtab (
testdb(# id INT,
testdb(# name VARCHAR(255),
testdb(# CONSTRAINT test_pk PRIMARY KEY (id));
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'test_pk' for table 'testtab'
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'test_pk' for table 'testtab'
CREATE
testdb=# INSERT INTO testtab VALUES(1,'ほげほげ');
INSERT 18735 1
testdb=# SELECT * FROM testtab;
id | name
----+----------
1 | ほげほげ
(1 row)
testtab-# \q
|
Java編
1.JDBCドライバーを作成するには
configure に --with-java オプションを指定しmakeしたならすでに出来ているはずです。
# su - postgres
$ cd /usr/local/src/postgresql-7.1/src/interfaces/jdbc/
$ make
------------------------------------------------------------
/usr/local/src/jakarta-ant/bin/ant -buildfile ../../../build.xml -Dmajor=7 -Dmin
or=1 -Dfullversion=7.1 -Ddef_pgport=5432
Buildfile: ../../../build.xml
jar:
call:
prepare:
check_versions:
driver:
Configured build for the JDBC2 edition driver.
compile:
[copy] Copying 4 files to /usr/local/src/postgresql-7.1/src/interfaces/jdbc
/build
examples:
jar:
[jar] Building jar: /usr/local/src/postgresql-7.1/src/interfaces/jdbc/jars
/postgresql.jar
checks:
prepare:
compile:
jar:
BUILD SUCCESSFUL
Total time: 4 seconds
------------------------------------------------------------
|
makeが終わるとjarsディレクトリの下にpostgresql.jarというファイルが作成されているはずです。
変更点は、PostgreSQL 7.1 リリースノート (JDBC編)を参照してください。
$ cp postgresql.jar $JAVA_HOME/jre/lib/ext
|
$JAVA_HOME/jre/lib/extにコピーする。
又はCLASSPATHの切ってあるフォルダにコピーします。
TOMCATから使うなら、$TOMCAT_HOME/libが良いでしょう。
どうしてもmakeできないときには、Postgres jdbc binariesからダウンロード可能です。
2.[SQL Exception]No suitable driverを解消するには
JDBCのURLが誤っている時のExceptionです。
・誤っている例 //の前の:が抜けている
String url = "jdbc:postgresql//localhost:5432/hoge";
[SQL Exception]
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:473)
at java.sql.DriverManager.getConnection(DriverManager.java:133)
at JdbcTest.main(JdbcTest.java:40)
|
JDBCTM ガイド: 使用の開始を参照しましょう。
3.[SQL Exception]Connection refused.を解消するには
postmaster -S のみで実行されている時のExceptionです。
[SQL Exception]
Connection refused. Check that the hostname and port is correct, and that the po
stmaster is running with the -i flag, which enables TCP/IP networking.
at org.postgresql.Connection.openConnection(Connection.java:123)
at org.postgresql.Driver.connect(Driver.java:116)
at java.sql.DriverManager.getConnection(DriverManager.java:453)
at java.sql.DriverManager.getConnection(DriverManager.java:133)
at JdbcTest.main(JdbcTest.java:40)
|
postmaster -S -i で起動しましょう。
自ホスト以外からの接続を受け付けるには、/usr/local/pgsql/data/pg_hba.confの設定を行う。
3.[SQL Exception]Permission denied.を解消するには
JDBCからの接続ユーザにテーブルへのアクセス権が与えられていない時のExceptionです。
[SQL Exception]
java.sql.SQLException: ERROR: test: Permission denied.
at org.postgresql.Connection.ExecSQL(Connection.java:393)
at org.postgresql.jdbc2.Statement.execute(Statement.java:273)
at org.postgresql.jdbc2.Statement.executeQuery(Statement.java:54)
at JdbcTest.main(JdbcTest.java:49)
|
psql よりアクセス権を設定しましょう。
(hogeユーザにtesttabテーブルへのアクセス権を与える例)
$ psql testdb
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
testdb=# GRANT ALL ON testtab TO hoge;
CHANGE
testdb=# \q
|
運用編
1.ユーザを作成するには
CREATE USER <ユーザ名>
[ WITH PASSWORD <パスワード> ]
[ CREATEDB | NOCREATEDB ]
[ CREATEUSER | NOCREATEUSER ]
[ IN GROUP <グループ名> [, ...] ]
[ VALID UNTIL <有効期限> ]
(hogeユーザをパスワードpasswordで作成する例)
$ psql testdb
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
testdb=# CREATE USER hoge WITH PASSWORD 'password';
CREATE USER
testdb=# \q
|
登録されているユーザは
SELECT * FROM pg_user;
で確認することが出来る。
createuserコマンドというのもある。
削除は、
DROP USER <ユーザ名>
2.POSTMASTERを起動するには
PostgreSQL管理者ユーザで行います。(postgres)
自ホスト以外からの接続を受け付けるには、/usr/local/pgsql/data/pg_hba.confの設定を行う。
3.テーブル定義を抽出するには
psqlで見る場合
$ psql testdb
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
testdb=# \d
List of relations
Name | Type | Owner
---------+-------+----------
testtab | table | postgres
(1 row)
testdb=# \d testtab
Table "testtab"
Attribute | Type | Modifier
-----------+--------------+----------
id | integer | not null
name | varchar(255) |
Index: test_pk
testdb=# \q
|
pg_dumpで一括出力の場合
$ pg_dump testdb -s
\connect - postgres
CREATE TABLE "testtab" (
"id" int4 NOT NULL,
"name" character varying(255),
PRIMARY KEY ("id")
);
REVOKE ALL on "testtab" from PUBLIC;
GRANT ALL on "testtab" to "hoge";
|
4.Accessからアクセスするには
ODBCドライバーを使います。
まずPostgreSQL ODBC DriverのオフィシャルWEBサイトからODBCドライバーをダウンロードします。
postdrv.exeを実行するとインストーラが走りインストールされます。
次に、インターウィズ PostgreSQL ODBC Driver 日本語版よりODBC Driver 日本語版をダウンロードし、Windowsのシステムディレクトリにインストールされたpsqlodbc.dllに上書きします。
そしてコントロールパネルのデータソース(ODBC)よりODBCの設定をします。
5.バックアップおよびバージョンアップするには
psql -l でデータベースの一覧が見れる。
$ psql -l
List of databases
Database | Owner | Encoding
-----------+----------+----------
template1 | postgres | EUC_JP
testdb | postgres | EUC_JP
(2 row)
|
pg_dumpでデータベースごとにバックアップする場合
$ pg_dump データベース名 > 任意のファイル名
|
そして上記バックアップより復元する場合
$ createdb データベース名
$ psql -e データベース名 < 任意のファイル名
|
バージョンアップの場合は、pg_dumpallコマンドでデータベースクラスタ全体の
バックアップを保存します。
$ pg_dumpall -o > 任意のファイル名
|
そして上記バックアップより復元する場合
$ psql -e template1 < 任意のファイル名
|
指定するDB名は、必ずtemplate1にすること。
pg_dumpでテーブルのデータのみバックアップする場合
$ pg_dump -t テーブル名 データベース名 > table.out
|
そして上記バックアップより復元する場合
テーブルはdropされている必要があります。
$ psql -e データベース名 < table.out
|
6.vacuum(データベースの不要領域の掃除と統計情報の生成)するには
PostgreSQLは、追記型記録方式ですので削除データの領域はvacuumしないと残ってしまいます。
例.
$ vacuumdb --dbname <dbname> --analyze
-d もしくは --dbname で対象となるデータベース名を指定します。
-z もしくは --analyze でオプティマイザで使用される、データベースの統計情報を生成します。
詳しいオプションは、vacuumdbを参照してください。
7.2からは、VACUUMがテーブルをロックしなくなり、VACUUMをかけながら更新もできるようになります。
PotgreSQL
先頭へ戻る
トップページへ戻る
|