postgresql/contrib/pgrowlocks
Tom Lane 89fefd9416 Reduce the permissions check needed to use pgrowlocks() to having
SELECT on the target table.  Per discussion.
2007-08-28 22:59:30 +00:00
..
Makefile Fix PGXS conventions so that extensions can be built against Postgres 2007-06-26 22:05:04 +00:00
pgrowlocks.c Reduce the permissions check needed to use pgrowlocks() to having 2007-08-28 22:59:30 +00:00
pgrowlocks.sql.in Restrict pgrowlocks function to superusers. (This might be too strict, 2007-08-27 00:13:51 +00:00
README.pgrowlocks Restrict pgrowlocks function to superusers. (This might be too strict, 2007-08-27 00:13:51 +00:00
README.pgrowlocks.euc_jp
uninstall_pgrowlocks.sql Restrict pgrowlocks function to superusers. (This might be too strict, 2007-08-27 00:13:51 +00:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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