mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
122 lines
3.8 KiB
Plaintext
122 lines
3.8 KiB
Plaintext
$PostgreSQL: pgsql/contrib/pgrowlocks/README.pgrowlocks.euc_jp,v 1.1 2006/04/23 01:12:58 ishii Exp $
|
||
|
||
pgrowlocks README 石井達夫
|
||
|
||
1. pgrowlocksとは
|
||
|
||
pgrowlocksは,指定されたテーブルの行ロックに関する情報を表示します.
|
||
|
||
pgrowlocksの返す型は,以下のようになります.
|
||
|
||
CREATE TYPE pgrowlocks_type AS (
|
||
locked_row TID, -- row TID
|
||
lock_type TEXT, -- lock type
|
||
locker XID, -- locking XID
|
||
multi bool, -- multi XID?
|
||
xids xid[], -- multi XIDs
|
||
pids INTEGER[] -- locker's process id
|
||
);
|
||
|
||
実行例を示します.
|
||
|
||
test=# SELECT * FROM pgrowlocks('t1');
|
||
locked_row | lock_type | locker | multi | xids | pids
|
||
------------+-----------+--------+-------+-----------+---------------
|
||
(0,1) | Shared | 19 | t | {804,805} | {29066,29068}
|
||
(0,2) | Shared | 19 | t | {804,805} | {29066,29068}
|
||
(0,3) | Exclusive | 804 | f | {804} | {29066}
|
||
(0,4) | Exclusive | 804 | f | {804} | {29066}
|
||
(4 rows)
|
||
|
||
各項目の説明です.
|
||
|
||
locked_row -- ロックされた行のタプルID(TID)
|
||
lock_type -- 共有ロックなら"Shared",排他ロックなら"Exclusive"
|
||
locker -- ロックをかけているトランザクションID[注1]
|
||
multi -- lockerがマルチトランザクションならtそうでなければf
|
||
xids -- ロックをかけているトランザクションID[注2]
|
||
pids -- ロックをかけているバックエンドプロセスのプロセスID[注2]
|
||
|
||
[注1: lockerがマルチなら,トランザクションIDではなくてマルチIDになり
|
||
ます.]
|
||
|
||
[注2: lockerがマルチの場合,複数のデータが表示されます.]
|
||
|
||
2. pgrowlocksのインストール
|
||
|
||
pgrowlocksのインストールには,PostgreSQLをインストールしたときのソー
|
||
スツリーが必要です.今のところ対応しているバージョンはPostgreSQL
|
||
8.0以降です.
|
||
|
||
ここではPostgreSQLのソースは/usr/local/src/postgresql-8.1/に展開さ
|
||
れているものとします.
|
||
|
||
1) pgrowlocksのソースを展開します.ソースファイルは
|
||
/tmp/pgrowlocks-1.0.tar.gzに置いてあるものとします.
|
||
|
||
$ cd /usr/local/src/postgresql-8.1/contrib
|
||
$ tar xfz pgrowlocks-1.0.tar.gz
|
||
|
||
2) PostgreSQL 8.0の場合は,ソースの一部に修正が必要です.
|
||
pgrowlocks.cの61行目辺りに
|
||
|
||
#undef MAKERANGEVARFROMNAMELIST_HAS_TWO_ARGS
|
||
|
||
というのがあるので,これを
|
||
|
||
#define MAKERANGEVARFROMNAMELIST_HAS_TWO_ARGS
|
||
|
||
に書き換えます(undef->defineにします).
|
||
|
||
3) コンパイルして関数の共有ライブラリをインストールします.
|
||
|
||
$ make
|
||
$ make install
|
||
|
||
4) ユーザ定義関数を登録します.
|
||
|
||
$ psql -e -f /usr/local/pgsql/share/contrib/pgrowlocks.sql test
|
||
|
||
この例では"test"というデータベースに登録していますが,もし他のデー
|
||
タベースに登録する場合はここを読み替えてください.
|
||
|
||
3. pgrowlocksの使い方
|
||
|
||
pgrowlocksの呼び出し形式は以下です.
|
||
|
||
CREATE OR REPLACE FUNCTION pgrowlocks(text) RETURNS pgrowlocks_type
|
||
AS 'MODULE_PATHNAME', 'pgrowlocks'
|
||
LANGUAGE 'c' WITH (isstrict);
|
||
|
||
第一引数: テーブル名
|
||
|
||
関数の戻りはpgrowlocks_type型です.
|
||
|
||
pgrowlocksはテーブルにAccessShareLockロックをかけ,1行ずつ読み出し
|
||
ては行ロックがかかっているかどうかチェックします.以下の点に注意し
|
||
てください.
|
||
|
||
1) 該当テーブルに排他ロックがかかっていると,pgrowlocksの実行はブロッ
|
||
クされます.
|
||
|
||
2) pgrowlocksの実行中に新たにかかったり,解除された行ロックに関する
|
||
情報はpgrowlocksの実行結果に反映されていない可能性があります.
|
||
|
||
|
||
pgrowlocksはロックされた行の内容は表示しません.行内容を見たい場合
|
||
は,テーブルをpgrowlocksのlocked_rows列で結合します.例を示します.
|
||
|
||
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_ row = a.ctid;
|
||
|
||
|
||
4. pgrowlocksのライセンス条件について
|
||
|
||
pgrowlocks.cの冒頭に書いてある通りです(修正BSDライセンスに準じてい
|
||
ます).また,pgrowlocks は完全に無保証です.pgrowlocks を使用したこ
|
||
とによって生じるいかなる結果に関しても責任を負いません.
|
||
|
||
5. 改訂履歴
|
||
|
||
2006/03/21 pgrowlocks バージョン 1.1リリース(8.2 currentでテスト)
|
||
2005/08/22 pgrowlocks バージョン 1.0リリース
|