postgresql入门(日文的)

[复制链接]
查看11 | 回复9 | 2005-5-10 17:20:25 | 显示全部楼层 |阅读模式
PostgreSQL 編1 - UNIX コマンド、Cygwin 2.05b、Cygwin B20(bash 2.02)
Cygwin 2.05b、Cygwin B20(bash 2.02) で、UNIX コマンドが必要となるので、
最小限のものをまとめておく。
Cygwin 2.05b のインストールについては、
PostgreSQL + Web 編4 - Cygwin 2.05b、Cygipc 1.11.1 インストール、移行
を参考にして下さい。
Cygwin B20(bash 2.02) のインストールについては、
PostgreSQL 編2 - Cygwin B20、.bashrc、IPC パッチ、PostgreSQL インストール
を参考にして下さい。
■cdカレントディレクトリ変更
?Cygwin B20 起動直後は、システムルートがカレントとなっていた。
cd と入力して、ホームディレクトリに切り換えておいた方が安全である。
ディレクトリを省略するとホームディレクトリとなる。
ホームディレクトリは、環境変数 HOME で設定する。
起動時にホームディレクトリの .bashrc を処理しているようなので、ここ
で HOME を export しておくと良い。
尚、.bashrc と言うファイル名はエクスポローラから直にはファイル名が許
されず作成できなかった。エディタの「名前を付けて保存」で作成した。
cd
cd /
cd /usr/local
cd ..
-- .bashrc --
HOME=/
export HOME
cd
ls -aF
■ls / dirファイル一覧表示
?ワイルドカード指定は、DOS と同等と思う。
ls
ls /
ls dirname
ls dirname/*
ls dirname/abc*
ls filename
ls -F /
|_ -a 「.」で始まるファイルも表示
-R サブディレクトリも処理
-F 「/」等の分類記号を付加して表示
-1 1 行に 1 アイテム表示
-C 1 行に複数表示
■mkdirディレクトリ作成
mkdir /test
mkdir -p /test/aaa
|_ -p 親ディレクトリも作成
■rmファイル削除
?rmdir は、ディレクトリが空でないと削除できないので、rm -r でディレク
トリ削除する方が便利である。
rm filename
rm -f filename
|_ -f 保護ファイルも削除
-i 削除前に警告
-r ディレクトリ、サブディレクトリ、ファイルも全て処理
■rmdirディレクトリ削除
?DOS と同様にディレクトリが空でないと削除できない。
rmdir dirname
■cpファイルコピー
cp filename1 filename2
cp path2/* path2
cp -R path2 path2
|_ -i 上書き確認あり
-f 上書き確認なし
-p タイムスタンプもコピー
-R サブディレクトリも処理
■mvファイル移動
?同一場所を指定すれば、リネームとなる。
mv filename1 filename2
mv -i path1/* path2
|_ -i 上書き確認あり
-f 上書き確認なし
■tarアーカイブ処理
tar -zxf arcfile
|_ -c アーカイブ
-r アーカイブ追加
-x 解凍
-z gzip の圧縮解凍を同時に行う
-f 使用アーカイブファイル、アーカイブ装置
■echo文字列表示
echo string
■exitシェル終了
exit
■mountファイルシステムマウント
mount c:/xxx /
mount -f c:/xxx/xxx /usr/xxx
|_ -f 強制マウント、警告表示なし
■umountファイルシステムアンマウント
umount /
umount -f /
|_ -f 強制アンマウント
■netstatネットワーク状況
netstat
■printenv環境変数表示
printenv
■ps実行中プロセス表示
ps
ps -u
|_ -u ユーザ表示
-a ユーザプロセス表示
-f プロセス親子関係表示
-j ジョブ形式表示
■jobsジョブ一覧表示
jobs -l
|_ -l プロセス番号表示
-p グループリーダプロセス番号表示
■&バックグランド実行
pgmname &
■killプログラム強制終了
kill job
kill processid
■|複数コマンド実行
cmd1 | cmd2
■>標準出力リダイレクト
cmd1 > ファイル
■>標準出力リダイレクト追加
cmd1 > ファイル
■>&標準出力、標準エラーリダイレクト
cmd1 >& ファイル
■whoaim自ユーザ情報表示
whoaim
■export環境変数設定
?PATH は、DOS と同等の機能で、複数パスは「:」で区切り設定する。
export VAR
export VAR = data
■envプロセス環境変数設定
env VAR = data cmdname
■sourceシェル設定ファイル処理
source /.bashrc
■シェルスクリプト
?DOS のバッチファイルのようなものが作れる。
制御構造はかなり強力である。
#!/bin/sh
echo "シェススクリプトですねん。"
ls -aF
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編2 - Cygwin B20、.bashrc、IPC パッチ、PostgreSQL インストール
Windows2000 に PostgreSQL をインストールする手順を整理しておく。
インストールに使用したパッケージは、
full.exe
Cygwin B20
cygwin-b20-local.tar.bz2
Cygwin B20 ツール
cygwin32_ipc-1.03-bin-patched.tar.bz2Cygwin B20 IPC パッチ
postgresql-7.0.2.tar.gz
PostgreSQL 7.0.2
である。
比較的新しい版数の PostgreSQL インストールについては、
PostgreSQL 7.2.3(postgresql-7.2.3.tar.gz)、JDBC pgjdbc2.jar インストール
を参考にして下さい。(参考にならないかも。) (^^;
Cygwin 2.05b のインストールについては、
PostgreSQL + Web 編4 - Cygwin 2.05b、Cygipc 1.11.1 インストール、移行
を参考にして下さい。
また、以下で使用するシェルスクリプト関係 saksh.lzh 1,169 bytes は、
.bashrc
sakipc
sakpsql1
sakpsql2
saktool
saktool.txt
である。ダウンロードして使用して下さい。
■Cygwin B20(full.exe) インストール
?Cygwin B20 のインストールは、通常の Windows ソフトインストールと同等
である。ダイアログに従い順に既定値でインストールすると良い。
既定値でのインストールでは、c:\cygnus\ としてフォルダが作成される。
■インストールパッケージコピー
?Cygwin B20 のインストールフォルダ c:\cygnus\ に
cygwin-b20-local.tar.bz2
Cygwin B20 ツール
cygwin32_ipc-1.03-bin-patched.tar.bz2Cygwin B20 IPC パッチ
postgresql-7.0.2.tar.gz
PostgreSQL 7.0.2
をコピーしておく。
■Cygwin B20 の起動
?スタートメニュー、プログラムより、Cygnus Solutions、Cygwin B20 を
起動する。「warning: could not find /tmp, please create!」と表示され
るが、後の処理で /tmp は作成される。
HOME は未設定、mount と入力すると、
Device Directory TypeFlags
C:
/
nativetext!=binary
となっており、$PATH で見ると /cygnus/CYGWIN~1/H-I586~1/bin が追加さ
れている。しかし、Windows2000 のシステム並びにユーザ環境変数の PATH
には追加されていない。Cygwin B20 の内部だけの処理で良いようである。
以下、この Cygwin B20 でのインストール処理となる。
■ファイルシステムマウント
?/ がシステムルートでは恐いので、c:/cygnus が / となるようにファイル
システムのマウントを変更する。
Cygwin B20 のコマンドラインで、次のように入力して変更する。
尚、マウント変更すると「cygwin-b20/H-i586-cygwin32/bin」のロケーショ
ンも変わるので、PATH に追加しないとコマンド操作不能になる。
落ち着いて入力すること。
尚、アンイストール後に再度インストールしてもマウント設定は記憶してい
るので再設定の必要はない。
umount /
mount -f c:/cygnus /
export PATH=/cygwin-b20/H-i586-cygwin32/bin:$PATH
?mount と入力すると、現在のマウント状況が次のように表示される。
Device Directory TypeFlags
c:\cygnus/
nativetext!=binary
■シェル設定ファイル .bashrc 作成
?c:/cygnus/ に .bashrc の名前でテキストファイルを作成する。
エクスポローラからは名前の制限で作成できないので、エディタの「名前を
付けて保存」等で作成すると良い。
このシェル設定ファイルでは、ホームデイレクトリの設定、Cygwin B20 と
PostgreSQL の環境変数設定を行っておく。
--↓ .bashrc シェル設定ファイル ↓--
export HOME=/
export PATH=$PATH:/usr/local/pgsql/bin:/usr/local/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib
cd
ls -aF
--↑ .bashrc シェル設定ファイル ↑--
?c:/cygnus/ に .bashrc が上記のとおり作成できれば、Cygwin B20 を
exit と入力して一度終了し、再度起動する。
うまく設定できていれば、
./
cygwin-b20/
../
cygwin-b20-local.tar.bz2
.bash_history
cygwin32_ipc-1.03-bin-patched.tar.bz2
.bashrc
postgresql-7.0.2.tar.gz
のように表示されて起動される。
別の場所が表示されている場合は、c:/cygnus/ がホームとなっていない。
「export HOME=/」の記述が間違っているか、先のマウントにミスがある。
■Cygwin B20 ツール(cygwin-b20-local.tar.bz2) インストール
?c:/cygnus/ に saktool.txt の名前でテキストファイルを作成する。
「10.1.1.2」は、自分の IP アドレスに修正すること。
--↓ saktool.txt 標準入力用ファイル ↓--
n
y
y
y
y
l
y
l
y
10.1.1.2
y
--↑ saktool.txt 標準入力用ファイル ↑--
?c:/cygnus/ に saktool の名前でシェルスクリプトを作成する。
--↓ saktool シェルスクリプト ↓--
#!/bin/sh
cd
mount -f c:/cygnus/cygwin-b20/share /sw/cygwin-b20/share
bunzip2 -dc cygwin-b20-local.tar.bz2 | tar -xvf -
mv local usr
cd /usr/bin
sh check_cygwin_setup.sh &2

exit 1

;;
更に /usr/src/pgsql/postgresql-7.0.2/src/template/ の cygwin_nt-5.0
を見に行くので、template/ にある cygwin32 を cygwin_nt-5.0 として
コピーする。この後に
cd /usr/src/pgsql/postgresql-7.0.2/src
./configure --enable-multibyte=EUC_JP
と手作業で入力する。
正常にコンフィグレーションが完了すると、次のように終了する。
...
...
...
creating pl/tcl/mkMakefile.tcldefs.sh
creating test/regress/GNUmakefile
creating include/config.h
linking ./backend/port/dynloader/win.c to backend/port/dynloader.c
linking ./backend/port/dynloader/win.h to include/dynloader.h
linking ./include/port/win.h to include/os.h
linking ./makefiles/Makefile.win to Makefile.port
linking ./backend/port/tas/dummy.s to backend/port/tas.s
linking ./include/port to interfaces/odbc/port
linking ./makefiles to interfaces/odbc/makefiles
linking ./template to interfaces/odbc/template
linking ./include/config.h to interfaces/odbc/config.h
?c:/cygnus/ に sakpsql2 の名前でシェルスクリプトを作成する。
--↓ sakpsql2 シェルスクリプト ↓--
#!/bin/sh
cd /usr/src/pgsql/postgresql-7.0.2/src
make all
make install
cp /usr/local/pgsql/lib/pq.dll /usr/local/pgsql/bin
cd
--↑ sakpsql2 シェルスクリプト ↑--
?次のように
sh /sakpsql2
と入力する。
う~ん、エラーがあってもわかんないかも。(^^;
-- make all ---
...
...
...
All of PostgreSQL is successfully made. Ready to install.
-- make install --
...
...
...
Thank you for choosing PostgreSQL, the most advanced open source database
engine.
■PostgreSQL データベース初期化
?次のように
initdb
と入力する。
正常に初期化できれば、次のように表示される。
This database system will be initialized with username "administrator".
This user will own all the data files and must also own the server process.
Creating database system directory /usr/local/pgsql/data
Creating database system directory /usr/local/pgsql/data/base
Creating database XLOG directory /usr/local/pgsql/data/pg_xlog
Creating template database in /usr/local/pgsql/data/base/template1
Creating global relations in /usr/local/pgsql/data/base
Adding template1 database to pg_database
Creating view pg_user.
Creating view pg_rules.
Creating view pg_views.
Creating view pg_tables.
Creating view pg_indexes.
Loading pg_description.
Vacuuming database.
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 start
■後始末
?以上が正常に終了すれば、/ の次のファイルは不要である。
cygwin-b20-local.tar.bz2
cygwin32_ipc-1.03-bin-patched.tar.bz2
postgresql-7.0.2.tar.gz
sakipc
sakpsql1
sakpsql2
saktool
saktool.txt
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編3 - ipc-daemon 起動、PostgreSQL 起動、psql 起動、ipgsql
■ipc-daemon 起動、終了
?どうも最初に ipc-daemon を起動しないと PostgreSQL が起動できない。
次のようにバックグランドとして起動する。
尚、「ipc-daemon -q &」とすると、メッセージボックスは表示されない。
ipc-daemon &
いろいろやってみたが ipc-daemon の止め方がわからない。
ps で、PID を調べて kill PID で落として良いのだろうか。(^^;
ps
PID TTY STIME COMMAND
1000-115:14:39 /CYGWIN~1/H-I586~1/bin/bash.exe
1005-115:16:49 /usr/local/bin/ipc-daemon.exe
1006-115:16:52 /CYGWIN~1/H-I586~1/bin/ps.exe
kill 1005
■PostgreSQL 起動、終了
?PostgreSQL の起動は、次のようにする。
「pg_ctl start」で起動すると、「pg_ctl stop」でうまく終われず、
kill もできない。(バラメタは、start、stop、restart、status がある。)
postmaster -i &
これまた、PostgreSQL の終了がうまくできない。
またまた強制終了かな。
うまくコミットされるのか実に不安。(^^;
とりあえず、この組み合わせで何度も起動、終了はできた。
ps
PID TTY STIME COMMAND
1000-115:14:39 /CYGWIN~1/H-I586~1/bin/bash.exe
1647-116:04:22 /usr/local/bin/ipc-daemon.exe
1648-116:04:56 /usr/local/pgsql/bin/postgres.exe
1651-116:05:57 /CYGWIN~1/H-I586~1/bin/ps.exe
kill 1648
?PostgreSQL の消費メモリは実に小さい。テストデータしかない関係かもし
れないが、Oracle9i がサービスで 300MB もメモリを消費するのに比較する
と、PostgreSQL は、25MB 程度しかサービスで消費していない。
OS 部分と含めても 180MB 程度である。(Windows2000、Cygwin 2.05b)
(メモリ消費的には、PostgreSQL 7.2.3 も 7.0.2 も大差はない。)
テーブルやレコード数によって、動的にメモリの消費量が増える可能性は
あるが、256MB の実装メモリがあれば、そこそこ快適に動作しそうに思う。
(Oracle9i は、512MB 以上の実装メモリが必要である。)
?PostgreSQL のレイポンスであるが、UNIX 系でなく Windows2000 でサービ
スした場合、どうなのか気になって更新レスポンステストを実施した。
結果は、次のとおりである。
-- 10,000 件のレコード追加 (5 レコード 1 トランザクション * 2000 回)
-- CPU Pentium4 - 2GHz、MEM 1GB、HDD 200GB(ATA-RAID0)
-- OS Windows2000
PostgreSQL 7.0.2 - 82 秒 VB6 ADO ODBC PostgreSQL
PostgreSQL 7.2.3 - 44 秒 VB6 ADO ODBC PostgreSQL
Oracle9i - 17 秒 VB6 ADO ODBC Microsoft ODBC for Oracle
Oracle9i - 21 秒 VB6 ADO ODBC Oracle in OraHome90
Oracle9i - 10 秒 VB6 oo4o
PostgreSQL 7.2.3 - 41 秒 JAVA Servlet JDBC pgjdbc2.jar
Oracle9i - 18 秒 JAVA Servlet JDBC classes12.jar
** 10,000 レコード 1 トランザクションにすると、どれも 4 倍ぐらい

高速になると推察する。
Oracle9i がメモリにものを言わせて超高速ではある。
特に oo4o アクセスは、抜群に速かった。
同じ Oracle ODBC ドライバでも Oracle 提供のものより、Microsoft 提供
のドライバの方が高速である。
ADO で比較すると、Oracle9i の 1 / 3 の性能を PostgreSQL 7.2.3 は出し
ている。(UNIX API エミュレーションで、ある程度速度低下していると思う。)
Oracle の以前のバージョンは 9i ほどのパフォーマンスがなかったように
体感しているので、Windows サービスでの PostgreSQL 7.2.3 もそこそこ
実用になりそう。(安定性もありそうに感じる。)
ただ、大量のレコードを扱う場合、やはり、PostgreSQL は UNIX 系サーバ
でサービスした方が良いかと思う。
尚、PostgreSQL 7.2.3 は、7.0.2 の 2 倍のパフォーマンスがある。
DB の持ち方もかなり変わっており、速さ的にも比較的新しいバージョンを
使用した方が良さそうである。
JDBC と ODBC でのアクセス差は、ほとんどないようである。
PostgreSQL 7.2.3 については、わずかではあるが JDBC アクセスの方が速い。
■psql 起動、終了
?psql は、Oracle の SQL*Plus と同等である。
(Cygwin 2.05b と less290i.tgz で psql での select 日本語表示可能。)
次のように起動する。
psql -h sak-design template1
|
|_ dbname [username]
|_ hostname or IP
終了は、次のように入力する。
\q
尚、select 等の問い合わせ後の待ちを抜けるのは、「q」キーを押す。
(最近のバージョンでは、多量のレコード問い合わせ以外は待ち合わせ
しないようになっている。)
■Interactive PostgreSQL(ipgsql) インストール
?Windows 用の GUI SQL ツール(ipgsql-1.6.2.zip) を見つけた。
(最近の PostgreSQL バージョンでは、使用できない。)
解凍し、libpq.dll を Windows2000 では、system32 ディリクトリに移動す
る。他のファイルは、C:/cygnus/ipgsql/ipgsql.exe となるように移動する。
ipgsql.exe のショートカットを作成し、Windows から起動する。
尚、当然であるが、PostgreSQL のサービスを起動しておかないと接続でき
ない。
?簡単に試した見た感じ、psql より使いやすい。
テーブル一覧もツールアイコンで表示できる。
ただ、日本語データが入力できない。
化け化けである。(^◇^

何か設定がないものだろうか。
日本語に対応できない可能性は高い。(^^;
尚、表示は化けるが、psql と同様に日本語 EUC で書いたテキストファイル
を実行させると日本語も処理はできる。
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編4 - テーブル作成、制約、項目タイプ、キー作成、順序作成
■日本語問題
?日本語 ODBC 経由のアクセスでは、項目名やデータとして日本語を使用する
ことに何ら問題がない。これは、ECU_JP パラメタでコンフィグレーション
をしたおかげと思う。
しかし、psql や ipgsql では、日本語がうまく扱えない。
テキストファイルからの実行等も行ったがダメである。
ECU コードで指定する必要があるのかと、日本語 EUC コードで、SQL のテ
キストを作成し、「\i」で実行させたら、正常に日本語が処理できた。
但し、psql の select 表示は化ける。(^^;
(Cygwin 2.05b と less290i.tgz で psql での select 日本語表示可能。)
■データベース作成
?PATH の優先順位が MySQL の方が高かったため、create database でエラー
が発生した。PostgreSQL への PATH が先に来るようにする。
?データベースの作成は、次のようにする。
create user sak with password 'sak';
create database sak;
■テーブル作成
?「\i sqlfile」で、テキストファイルに記述した SQL を処理できる。
また、クリップボードコピーでの流し込みでも処理できる。
create table testm (
key
char(008) primary key,
data1
int8,
data2
int8,
data3
int8
);
?テーブル作成時に NOT NULL 制約、UNIQUE 制約、DEFAULT 初期値設定を
指定できる。
create table testm (
key
char(008) primary key,
data1
int8 not null,
data2
int8 unique,
data3
int8 default 0 not null
);
?constraint でプライマリキーを付けるには、次のようにする。
複合主キーは、これ以外の方法では付けられない。
create table testm (
key
char(008),
data1
int8,
data2
int8,
data3
int8,
constraint KEY_NAME primary key (
key,
data1
)
);
?テーブル削除は、次のようにする。
drop table testm;
■項目タイプ(フィールドタイプ)
?PostgreSQL 項目型
smailint / int2
2 バイト整数
integer / int / int4
4 バイト整数
bigint / int8
8 バイト整数
decimal(a, a) / numeric(a, s) 10 進型
real / float4
6 桁単精度浮動小数点
double precision / float8 15 桁倍精度浮動小数点
serial
4 バイト順序
bigserial
8 バイト順序
date
日付
time
時間
timestamp
日付時間
char(文字数) / character
固定長文字列(最大 4096 文字)
varchar(文字数) / charcter varying可変長文字列(最大 4096 文字)
text
無制限テキスト
ラージオブジェクト
oid 型 (いまいちわからん) (^^;
boolean / bool
true / false
■キー作成
?単項目のキー設定は、テーブル作成時の create 文で行うと良い。
項目定義に primary key を指定するだけである。
key
char(008) primary key,
?複合主キーについては、PostgreSQL では、テーブル作成後に別途 alter 文
で追加することはできない。
create tabel 時に constraint primary key で付加しておくこと。
create table testm (
key
char(008),
data1
int8,
data2
int8,
data3
int8,
constraint KEY_NAME primary key (
key,
data1
)
);
?主キー以外にいくつでも副キー索引を作成できる。
create index で作成するが、ユニークでない重複キーも作れる。
頻繁に使われるクエリのキーは作成しておくと、レスポンスが著しく違う。
但し、あまりキー(索引) を作りすぎてもいけない。
更新時に索引の更新負荷が増大することになる。
従って、問い合わせクエリを意識した最小限で、かつ、高速アクセスとなる
索引を設計する。
また、where 句や order by 句にキーを含めて指定するようにする。
データベースの更新や問い合わせに異様に時間がかかるのは、キーの指定が
されていないからである。
?create tabble 時の primary key は、システムが自動的に索引を作成する
ので、手作業で別途作成する必要はない。
それ以外の副キーは、次のように作成する。
unique 指定がなければ重複可となる。
create unique index KEY_NAME on testm (
key,
data1
);
create index KEY_NAME on testm (
key,
data1
);
?索引の削除は、次のようにする。
drop index KEY_NAME;
■順序作成
?順序は、serial と定義することで利用できる。
create table testm (
key
char(008),
data1
serial,
data2
int8,
data3
int8
);
insert into testm values('a001');
insert into testm values('b002');
key| data1 | data2 | data3
----------+-------+-------+-------
a001 | 1 | |
b002 | 2 | |
?Oracle と同じ順序のように create sequence がある。
単純な順序は、次のように作成する。
create sequence seq;
?次のようにすると、10000 ~ 9999900、増分 100 でくるくる回ります。
cache の省略値は不明。
create sequence seq
increment100
minvalue 10000
maxvalue 9999900
start10000
cache200
cycle
;
?順序の削除は、次のようにする。
drop sequence seq;
?実際に順序を利用するには、次のようにする。
nextval がシーケンス番号を生み出す。
尚、順序が rollback されず、飛ぶ可能性があるかは未検証。
currval は、前回と同じ順序を呼び出す。順序の現在値ではなく、
セッションユーザが最後に使用した値になるかは未検証。
insert into testm values ('s001', nextval('seq'), 20, 30);
insert into testm values ('s002', nextval('seq'), 20, 30);
insert into testm values ('s003', currval('seq'), 20, 30);
key| data1 | data2 | data3
----------+-------+-------+-------
s001 | 10000 |20 |30
s002 | 10100 |20 |30
s003 | 10100 |20 |30
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編5 - テーブルクリア、テーブル定義変更、整合性制約定義、権限
■テーブルクリア
?テーブル中のデータだけを全て削除するには、delete 文を使用する。
delete from testm;
?但し、単純クリアが目的なら、この方法はレスポンス的に問題がある。
トランザクション機能が働くので、全レコードのトランザクションバッファ
への書き込みとコミットによる更新が行われる。
何万件にも及ぶデータのクリアを delete 文でやると実用に耐えない。
?単純なテーブルクリアが目的の場合は、表切り捨て(truncate) を使用する
と良い。この方が一瞬でクリアできる。
truncate table testm;
?思いきって、テーブル削除と再作成を利用する手もある。
drop table testm;
create table testm (
key
char(008),
data1
int8,
data2
int8,
data3
int8
);
■テーブル定義変更(テーブル属性変更、列定義変更)
?データ項目の桁数が足りなくなったり、新たな項目を追加するのは alter
文で簡単に行える。但し、項目の削除はできない。
項目の削除を行うには、
データ退避
テーブル削除
テーブル再作成
新形式にデータ編集
データセットアップ
を行う必要がある。
?新たにテーブルに項目を追加(列の追加、フィールド追加、カラム追加)
するには、次のようにする。
Oracle のように複数項目を一度に追加することはできない。
alter table testm add
newdata1int8
;
?PostgreSQL では、列名の変更ができる。
alter table testm rename
data1 to abc
;
?PostgreSQL では、列の項目タイプ定義変更はできないようである。
項目タイプを変更するためには、テーブルを作り直すしかない。
■整合性制約定義、リレーション、リファレンス、外部キー
?データ項目に他のテーブルとのリレーションをとって、制約条件などを設定
することができる。(constraints)
制約追加は、create table 時、または、alter table で行う。
?列制約には、
primary key主キー制約(unique & not null)
unique 一意キー制約(ユニーク項目、一意制約、ユニーク値、ユニークキー、ユニーク制約)
not null NOT ヌル制約
checkチェック制約
references 参照整合性制約(参照制約、外部整合性制約、外部制約キー)
がある。
PostgreSQL では、primary key、unique、not null 制約については、
create table 時にしか定義できない。
alter table で指定可能なのは、check、references 制約だけである。
alter table testm
add constraint TESTM_JCSU check(data1 >= 0)
;
alter table testm
add constraint TESTM_FKEY
foreign key (key) references test2m (key)
;
?PostgreSQL では、制約単体の削除はできないようである。
■名前変更(テーブル名変更)
?テーブル名の変更は、次のようにする。
alter table testm rename to abc;
■ユーザ作成
?ユーザの作成は、次のようにする。
create user sak with password 'sak';
?ユーザの削除は、次のようにする。
drop user sak;
■システム権限付与
?PosegreSQL については、ロールが使用可能か不明である。
権限の付与は、次のようにする。
grant 権限名, ...
on オブジェクト, ...
to public;
|_ public
group グループ名
ユーザ名
?権限の取り消しは、次のようにする。
revoke 権限名, ...
on オブジェクト名, ...
from public;
|_ public

group グループ名

ユーザ名
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編6 - ビュー作成、結合ビュー作成、ビュー削除、create view
■ビュー作成
?ビューの使い方で、データベースの使い心地とプログラムでのハンドリング
負荷が大きく変わる。
必要なビューを上手く設計して、プログラムコード負荷が少なくなるように
する。尚、ビューとは、仮想的な表、つまり、仮想テーブル、論理テーブル
みたいなものである。
?create view の as 句以降には、select 文の様々なパターンが指定できる。
たいへん強力である。
?単純ビューで、特定のデータを抜き出す指定は次のようにする。
この例では、testv1 は、キーの先頭が「a」で始まるものだけのテーブル
と同じにアクセスできるようになる。
尚、view に order by 句は指定できない。
create table testm (
keychar(8),
data1int8,
data2int8,
data3int8
);
insert into testm values ('a001', 1, 2, 3);
insert into testm values ('a011', 1, 2, 3);
insert into testm values ('b002', 10, 20, 30);
insert into testm values ('c003', 100, 200, 300);
create view testv1 as
select
key,
data1,
data2,
data3
from testm
where key like 'a%'
;
select * from testv1;
?特定の項目を見せたくないときは次のようにする。
表の分割のようなことにも応用できる。
この例では、testv2 には、data2 と言う項目がなくなる。
create view testv2 as
select
key,
data1,
data3
from testm
;
select * from testv2;
?項目名を変更する場合は、次のようにする。
この例では、testv3 には、data1 と言う項目名が「abc」と言う項目名に
変更されている。
create view testv3 as
select
key,
data1 as abc,
data3
from testm
;
select * from testv3;
?計算項目を作る場合は、次のようにする。
この例では、data1 + data2 の合計が「total」と言う項目名で追加される。
様々な SQL 関数を用いた計算項目が作成できる。
create view testv4 as
select
key,
data1,
data2,
data3,
data1 + data2 as total
from testm
;
select * from testv4;
?文字列の結合項目を作る場合は、次のようにする。
この例では、data1 と data2 の結合文字が「catstr」と言う項目名で追加
される。SQL 関数を用いたフォーマットなども可能である。
create view testv5 as
select
key,
data1,
data2,
data3,
data1 || data2 as catstr
from testm
;
select * from testv5;
■結合ビュー作成
?単純ビューでの様々な指定を含みながら、複数のテーブルやビューをひとつ
のビューに結合することができる。
結合する条件が必要なので、なんでもかんでも結合できるわけではない。
リレーショナルデータベースのゆえんは、この機能にある。
次のテーブルがあったとする。test2m の code1 は、testm の key に対応
しているものとする。
create table test2m (
keychar(8),
code1char(8)
);
insert into test2m values ('abc01', 'a001');
insert into test2m values ('abc02', 'a011');
insert into test2m values ('abc03', 'z999');
create table testm (
keychar(8),
data1int8,
data2int8,
data3int8
);
insert into testm values ('a001', 1, 2, 3);
insert into testm values ('a011', 1, 2, 3);
insert into testm values ('b002', 10, 20, 30);
insert into testm values ('c003', 100, 200, 300);
?test2m の code1 に testm の key を結合(ジョイン join) する場合、
次のようにする。
この例は、クロスジョイン(cross join)である。
create view testv6 as
select
test2m.key as key,
code1as code1,
testm.keyas bkey,
data1as data1,
data2as data2,
data3as data3
from test2m, testm
where test2m.code1 = testm.key
;
select * from testv6;
?たくさんのテーブルやビューを結合する場合、修飾が見にくく難解になって
くる。その場合、次のようにする。
from 句でテーブルやビューの一時名を指定して、それで修飾する。
上手く使うと、すっきりした SQL 文にできる。
「,」で区切るのと「cross join」と書くのは同じである。
create view testv7 as
select
a.key as key,
code1as code1,
b.keyas bkey,
data1as data1,
data2as data2,
data3as data3
from test2m a, testm b
where a.code1 = b.key
;
create view testv8 as
select
a.key as key,
code1as code1,
b.keyas bkey,
data1as data1,
data2as data2,
data3as data3
from test2m a cross join testm b
where a.code1 = b.key
;
select * from testv8;
key|code1 | bkey | data1 | data2 | data3
----------+----------+----------+-------+-------+------
abc01| a001 | a001 | 1 | 2 | 3
abc02| a011 | a011 | 1 | 2 | 3
?実際には、left join を使用する場合が多い。
古い PostgreSQL では、cross join 以外使えないが、最近のバージョンは
問題なく使える。
create view testv9 as
select
a.key as key,
code1as code1,
b.keyas bkey,
data1as data1,
data2as data2,
data3as data3
from test2m a left join testm b on a.code1 = b.key
;
select * from testv9;
key|code1 | bkey | data1 | data2 | data3
----------+----------+----------+-------+-------+------
abc01| a001 | a001 | 1 | 2 | 3
abc02| a011 | a011 | 1 | 2 | 3
abc03| z999 |
| | |
■ビュー削除
?ビューを削除しても、実際のテーブルデータが消えることはない。
drop view testv1;
drop view testv2;
drop view testv3;
drop view testv4;
drop view testv5;
drop view testv6;
drop view testv7;
drop view testv8;
drop view testv9;
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編7 - 問い合わせ、レコード参照、クエリ、select、like、count
■データベース問い合わせ
?リレーショナルデータベース(RDB) では、select 文を用いて、実に様々な
問い合わせが可能である。
?特定のデータを抜き出す指定は次のようにする。
この例では、key の先頭が「a」で始まるものだけが問い合わされる。
like は、部分一致を行う。
select
key,
data1,
data2,
data3
from testm
where key like 'a%'
order by key
;
?問い合わせ件数(照会件数)を引き取るには、次のようにする。
select count(*) from testm where key like 'a%';
?次の構文はエラーとなる。
select
key,
data1,
data2,
data3,
count(*) as ct
from testm
where key like 'a%'
order by key
;
?group by での count 構文は OK。
select
key,
sum(data1),
sum(data2),
sum(data3),
count(key) as ct
from testm
where key like 'a%'
group by key
;
?複数条件で抽出するには、次のようにする。
この例では、key が「a001」と「b002」のものが問い合わされる。
where 句には、and、or を複合条件指定できる。
() で囲まれた条件ほど優先順位が高い。
select
key,
data1,
data2,
data3
from testm
where key = 'a001' or key = 'b002'
order by key
;
select
key,
data1,
data2,
data3
from testm
where (key = 'a001' or key = 'b002') and data1 > 0
order by key
;
?項目指定に「*」を指定すると、全ての項目が含まれる。
select
*
from testm
where key like 'a%'
order by key
;
?特定の項目を見せたくないときは次のようにする。
この例では、data2 と言う項目がなくなる。
select
key,
data1,
data3
from testm
order by key
;
?項目名を異なった項目名に変更する場合は、次のようにする。
この例では、data1 と言う項目名が「abc」と言う項目名に変更されている。
select
key,
data1 as abc,
data3
from testm
order by key
;
?計算項目を作る場合は、次のようにする。
この例では、data1 + data2 の合計が「total」と言う項目名で追加される。
様々な SQL 関数を用いた計算項目が作成できる。
select
key,
data1 + data2 as total,
data3
from testm
order by key
;
?文字列の結合項目を作る場合は、次のようにする。
この例では、data1 と data2 の結合文字が「stritem」と言う項目名で追加
される。SQL 関数を用いたフォーマットなども可能である。
select
key,
data1 || data2 as stritem,
data3
from testm
order by key
;
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編8 - 表結合(join)、単純結合、等価結合、外部結合、再帰結合
様々な連結テーブルが作成できるが、良く使うものはビュー(create view) に
しておくと効率が良い。結合は、テーブルとテーブル、ビューとビュー、テーブ
ルとビューなど複雑にできる。(テーブル連結)
尚、古い PostgreSQL では、クロスジョイン(CROSS JOIN) しかサポートして
いないので注意。最近の PostgreSQL は Oracle と同等である。
■単純結合
?現実的に単純結合を使う機会はないだろう。
次の例では、test2m の各レコードに testm の全レコードが結合される。
test2m のレコード数 x testm のレコード数の結果が問い合わされる。
select * from test2m, testm;
select * from test2m cross join testm;
key|code1 | key| data1 | data2 | data3
----------+----------+----------+-------+-------+-------
abc01| a001 | a001 | 1 | 2 | 3
abc01| a001 | a011 | 1 | 2 | 3
abc01| a001 | b002 |10 |20 |30
abc01| a001 | c003 | 100 | 200 | 300
abc02| a011 | a001 | 1 | 2 | 3
abc02| a011 | a011 | 1 | 2 | 3
abc02| a011 | b002 |10 |20 |30
abc02| a011 | c003 | 100 | 200 | 300
abc03| z999 | a001 | 1 | 2 | 3
abc03| z999 | a011 | 1 | 2 | 3
abc03| z999 | b002 |10 |20 |30
abc03| z999 | c003 | 100 | 200 | 300
■等価結合
?等価結合は、特定のキーで表を結合します。
条件のどちらかのデータが存在しない場合、結果セットには含まれません。
現実的には外部結合が一番使いやすいと思います。
select
test2m.key,
code1,
data1,
data2,
data3
from test2m, testm
where test2m.code1 = testm.key
;
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | 1 | 2 | 3
abc02| a011 | 1 | 2 | 3
?inner join を使用して、等価結合することもできます。(インナージョイン)
select
test2m.key,
code1,
data1,
data2,
data3
from test2m inner join testm on test2m.code1 = testm.key
;
?3 つ以上の結合を inner join で指定するには、次のようにする。
select
test2m.key,
...
from (test2m inner join testm on test2m.code1 = testm.key)
inner join test3m on test2m.code1 = test3m.key
;
■非等価結合
?非常に時間のかかる結合ですが、必要な場面があるかもしれない。
なにがしかの範囲条件で結合する場合に使います。
select
test2m.key,
code1,
data1,
data2,
data3
from test2m, testm
where test2m.code1 like substr(testm.key, 1, 2) || '%'
;
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | 1 | 2 | 3
abc01| a001 | 1 | 2 | 3
abc02| a011 | 1 | 2 | 3
abc02| a011 | 1 | 2 | 3
■外部結合(外結合、行結合、行連結、テーブル結合、外部接合)
?外部結合は、一番よく使用します。
一方の条件に対するデータが存在しなかった場合でも片方のデータを結果セ
ットに含める指定ができます。
(左結合、右結合、複数テーブル問い合わせ、複数テーブル参照)
(複数問い合わせ、複合テーブル参照、レフトジョイン、ライトジョイン)
select
test2m.key,
code1,
data1,
data2,
data3
from test2m left join testm on test2m.code1 = testm.key
;
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | 1 | 2 | 3
abc02| a011 | 1 | 2 | 3
abc03| z999 | | |
?right join は、left join の逆で、次のようにする。
select
test2m.key,
code1,
data1,
data2,
data3
from test2m right join testm on test2m.code1 = testm.key
;
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | 1 | 2 | 3
abc02| a011 | 1 | 2 | 3

|
|10 |20 |30

|
| 100 | 200 | 300
?三つ以上の表を結合することもできます。(3 テーブル結合)
select
test2m.key,
...
from (test2m left join testm on test2m.code1 = testm.key)
left join test3m on test2m.code1 = test3m.key
;
?複数の表を結合すると修飾が難解になりがちなので、テーブル別名を使うと
良いです。
select
a.key as key,
code1,
data1,
data2,
data3
from test2m a left join testm b on a.code1 = b.key
;
** 外部結合を明示するために left join を left outer join、right join
を right outer join と書くこともできる。
(アウタージョイン、レフトアウタージョイン、ライトアウタージョイン)
select
a.key as key,
code1,
data1,
data2,
data3
from test2m a left outer join testm b on a.code1 = b.key
;
■再帰結合(内部結合)
?再帰結合は、同じテーブルをテーブル別名を使用して結合します。
次の例では、得意先m に親得意先CD があるとして、その得意先名を自分自
身と結合しています。(自己結合)
select
a.得意先CD 得意先CD,
a.得意先名 得意先,
a.親得意先CD 親得意先CD,
b.得意先名 得意先
from 得意先m a, 得意先m b
where a.得意先CD = b.親得意先CD
;
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編9 - スカラー副問い合わせ、件数指定、OFFSET、LIMIT、HAVING
■スカラー副問い合わせ
?PostgreSQL でも、スカラー副問い合わせがサポートされている。
このスカラー副問い合わせは、広く応用できて非常に便利です。
尚、フィールドなど単一行の結果を戻す必要のある問い合わせを
単一行副問い合わせと呼ぶ。
(単1行副問い合わせ、単一行問い合わせ、単1行問い合わせ)
select
key,
(select key from testm b where key = a.code1)
from test2m a
;
key| ?column?
----------+----------
abc01| a001
abc02| a011
abc03|
abc02| a011
abc03|
■インラインビュー
?インラインビューは、次のようにする。
select *
from (select * from testm where key like 'a%') a
where a.data1 > 0
;
■件数指定 OFFSET、LIMIT
?先頭から 3 件問い合わせるには、次のようにする。
access の top と同じことができる。
(TOP 10 取得、表示行制限、レコード数限定、件数指定、表示件数)
(1 レコード取得、1 件取得)
select * from testm
order by key
offset 0 limit 3
;
key| data1 | data2 | data3
----------+-------+-------+-------
a001 | 1 | 2 | 3
a011 | 1 | 2 | 3
b002 |10 |20 |30
?先頭レコードを問い合わせるには、次のようにする。
select * from testm
where key like 'a%'
order by key
offset 0 limit 1
;
key| data1 | data2 | data3
----------+-------+-------+-------
a001 | 1 | 2 | 3
?最後から 3 件問い合わせるには、ソートオーダを逆にすれば良い。
select * from testm
order by key desc
offset 0 limit 3
;
key| data1 | data2 | data3
----------+-------+-------+-------
c003 | 100 | 200 | 300
b002 |10 |20 |30
a011 | 1 | 2 | 3
■EXISTS
?副問い合わせが行を戻したか。
select * from testm a
where exists (select * from test2m b where b.code1 = a.key);
■HAVING
?集計結果に対する問い合わせ条件を指定する。
select key, count(*), sum(data1), avg(data1) from testm
group by key
having sum(data1) > 10;
key| count | sum |avg
----------+-------+-----+----------------
c003 | 1 | 100 | 100.0000000000
■USING
?項目で結合する。(この例は悪い。)
select * from test2m left join testm
using (key);
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | | |
abc02| a011 | | |
abc03| z999 | | |
■CROSS JOIN
?Oracle の「,」標記と同じ。(クロス結合、クロスジョイン)
select * from test2m cross join testm
where test2m.code1 = testm.key;
key|code1 | key| data1 | data2 | data3
----------+----------+----------+-------+-------+-------
abc01| a001 | a001 | 1 | 2 | 3
abc02| a011 | a011 | 1 | 2 | 3
■NATURAL JOIN
?同じ名前の列を自然結合する。(ナチュラルジョイン)
(この例は悪い。)
select * from test2m natural left join testm;
key|code1 | data1 | data2 | data3
----------+----------+-------+-------+-------
abc01| a001 | | |
abc02| a011 | | |
abc03| z999 | | |
回复

使用道具 举报

千问 | 2005-5-10 17:20:25 | 显示全部楼层
PostgreSQL 編10 - 問い合わせ、抽出、ソート、where、like、order by、desc
■抽出問い合わせ(抽出条件、条件抽出)
?単純な抽出条件は次のように指定する。
この例では、key が「a001」のものだけが問い合わされる。
select * from testm
where key = 'a001'
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
a001 | 1 | 2 | 3
?この例では、key が「a001」以外のものだけが問い合わされる。
select * from testm
where key'a001'
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
a011 | 1 | 2 | 3
b002 |10 |20 |30
c003 | 100 | 200 | 300
?この例では、data3 が NULL のものだけが問い合わされる。
(空列検索、NULL 列検索、NULL 検索、NULL 抽出)
select * from testm
where data3 is null
order by key
;
?この例では、data3 が NULL でないものだけが問い合わされる。
(NULL 以外)
select * from testm
where not data3 is null
order by key
;
?範囲抽出条件は次のように指定する。
この例では、key が「a000」~「a999」の範囲が問い合わされる。
select * from testm
where key >= 'a000' and key10 and data2 > 10
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
c003 | 100 | 200 | 300
?or では、各条件を満たす抽出がてきる。
この例では、data1 か data2 のどちらが 10 より上のものが問い合わさ
れる。
select * from testm
where data1 > 10 or data2 > 10
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
b002 |10 |20 |30
c003 | 100 | 200 | 300
?and と or の組み合わせは、優先順位を () で必ず指定するようにする。
この例では、data1 か data2 のどちらが 10 より上のもので、key の先頭
が「c」で始まるものだけが問い合わされる。
select * from testm
where (data1 > 10 or data2 > 10) and key like 'c%'
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
c003 | 100 | 200 | 300
■ソート(並べ換え、並べ替え)
?order by 句でソート順が指定できる。
この例では、key の昇順に問い合わされる。
select * from testm
order by key
;
key| data1 | data2 | data3
----------+-------+-------+-------
a001 | 1 | 2 | 3
a011 | 1 | 2 | 3
b002 |10 |20 |30
c003 | 100 | 200 | 300
?desc を指定すると降順になる。
この例では、key の降順に問い合わされる。
select * from testm
order by key desc
;
key| data1 | data2 | data3
----------+-------+-------+-------
c003 | 100 | 200 | 300
b002 |10 |20 |30
a011 | 1 | 2 | 3
a001 | 1 | 2 | 3
?ソートオーダは複数項目指定できる。
この例では、data1 の大きい順で key の昇順に問い合わされる。
select * from testm
order by data1 desc, key
;
key| data1 | data2 | data3
----------+-------+-------+-------
c003 | 100 | 200 | 300
b002 |10 |20 |30
a001 | 1 | 2 | 3
a011 | 1 | 2 | 3
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行