ホーム
新着サイト

ニュースサイト
ソフトウェア
フリー・シェアウェア
出版社
情報処理技術者試験
ベンダー試験
求人情報
ノンセクション
Microsoft
Windows
Windows2000
WindowsNT
Windows9x
プログラミング
Visual Basic
C
C++
Java
Delphi
COM/DCOM
Office/VBA
WebDesign
HTML/XML
JavaScript
VBScript
Servlet/JSP
JavaApplet
CGI&SSI
Perl
Active Server Pages
PHP
データベース
Oracle
PostgreSQL
MySQL
UNIX
Linux
FreeBSD
Mac
Server Software
DNS
Mail
Web
Application Server
オブジェクト指向
セキュリティ
ネットワーク

Cool Site
随時更新
ハードウェア
インターネット
テレコミ
プロバイダ
レンタルサーバ
ウェブログ
検索
視力回復情報
ITNAVI.com
別冊(実用)

ITNAVI.com
ガイド



リンク切れ報告、サイト情報お待ちしています"
sawa@itnavi.com


リンクは御自由にどうぞ




PostgreSQLしてみよう


リリース情報
2003/5/28 PostgreSQL 7.3.3 リリース

構築環境
PostgreSQL 7.2.3
Red Hat Linux 7.3

PostgreSQL 7.0.2での設定例
PostgreSQL 7.1での設定例
PostgreSQL 7.1.2での設定例

インストール編
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.2.3.tar.gzをダウンロードします。


1.postgresユーザを追加する
useradd postgres

2.インストールディレクトリを作成する
postgresユーザが書き込めるように設定する。
(sourceを展開するディレクトリは適宜変更する)
# mkdir /usr/local/src/postgresql-7.2.3/
# chown postgres:postgres /usr/local/src/postgresql-7.2.3/
# 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するを参照してください。

JDK1.4 では、JDBCドライバはコンパイルできないらしい。([pgsql-jp: 27491] Re: JDBCドライバについて)ので、JDK1.3 を使用しています。
今回antは、1.5.1を使用しました。

export ANT=/usr/local/src/jakarta-ant/bootstrap/bin/ant
export JAVA_HOME=/usr/local/jdk1.3.1_02
export PATH=$PATH:$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.2.3/
$ tar xvzf postgresql-7.2.3.tar.gz
$ cd postgresql-7.2.3
$ ./configure --enable-multibyte=EUC_JP --with-java

$ make
$ make check
$ make install
$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

creating directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
creating template1 database in /usr/local/pgsql/data/base/1... ok
creating configuration files... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
creating system views... ok
loading pg_description... ok
vacuuming database template1... ok
copying template1 to template0... ok

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 の起動をテストしてみる。
$ 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.2.3/postgresql-7.2.3/src/interfaces/jdbc/
$ make
------------------------------------------------------------
/usr/local/src/jakarta-ant/bootstrap/bin/ant -buildfile ./build.xml all \
  -Dmajor=7 -Dminor=2 -Dfullversion=7.2.3 -Ddef_pgport=5432
Buildfile: ./build.xml

all:

prepare:

check_versions:

driver:
[available] DEPRECATED -  used to override an existing property.
[available]   Build file should not reuse the same property name for different v
alues.
[available] DEPRECATED -  used to override an existing property.
[available]   Build file should not reuse the same property name for different v
alues.
     [echo] Configured build for the JDBC2 edition driver

compile:

examples:

jar:
      [jar] JARs are never empty, they contain at least a manifest file
      [jar] JARs are never empty, they contain at least a manifest file

BUILD SUCCESSFUL
Total time: 3 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できないときには、PostgreSQL JDBC Driverからダウンロード可能です。



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を起動するには

$ 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をかけながら更新もできるようになります。





PostgreSQL


先頭へ戻る トップページへ戻る


転ばぬ先の杖。ウィルス対策!

Virus Bulletin誌で100%検出の栄誉を業界最多の33回受賞の
cover
NOD32

1,980円でできるウイルス対策。ウイルス対策、ハッカー対策、個人情報漏洩対策、スパム対策がこれ一本で
cover
ウイルスセキュリティ
Copyright(c) 2002-2017 ITNAVI.com