You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
postgres/contrib/pgrowlocks
Tom Lane 895a94de6d Avoid incrementing the CommandCounter when CommandCounterIncrement is called 18 years ago
..
Makefile Remove references to READMEs from /contrib Makefiles. 18 years ago
README.pgrowlocks.euc_jp Add new contrib function pgrowlocks. See README.pgrowlocks for more details. 19 years ago
pgrowlocks.c Avoid incrementing the CommandCounter when CommandCounterIncrement is called 18 years ago
pgrowlocks.sql.in Add CVS version labels to all install/uninstall scripts. 18 years ago
uninstall_pgrowlocks.sql Add CVS version labels to all install/uninstall scripts. 18 years ago

README.pgrowlocks.euc_jp

$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リリース