iakioの日記 RSSフィード

2008-05-20

更新可能カーソル

| 11:11 | 更新可能カーソル - iakioの日記 を含むブックマーク はてなブックマーク - 更新可能カーソル - iakioの日記

まだ使ったことがない8.3の新機能をちょろちょろ調べます。

更新可能カーソルの使い方は、(DELETE又はUPDATE) ... WHERE CURRENT OF [カーソル名];だそうです。これでユニークなキーを持たないテーブルから1行だけ削除なんていうのも簡単にできるようになりますね。

db1=> SELECT * from t1;
 i
---
 1
 1
 1
(3 rows)

db1=> begin;
BEGIN
db1=> declare cur1 cursor for select * from t1;
DECLARE CURSOR
db1=> fetch cur1;
 i
---
 1
(1 row)

db1=> delete from t1 where current of cur1;
DELETE 1
db1=> select * from t1;
 i
---
 1
 1
(2 rows)

db1=> commit;
COMMIT

WHERE CURRENT OFは最後にfetchした行を表すので、まだ一度もfetchしていなければエラーとなります。

db1=> delete from t1 where current of cur1;
ERROR:  cursor "cur1" is not positioned on a row
トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20080520

2008-04-28

pgbenchの正しい使い方

| 23:40 | pgbenchの正しい使い方 - iakioの日記 を含むブックマーク はてなブックマーク - pgbenchの正しい使い方 - iakioの日記

PostgreSQL 8.3から、contrib/に格納されているプログラムについての説明が本体のドキュメントに記載されるようになりました。個人的には嬉しい変更点の一つです。

追加で提供されるモジュール - PostgreSQL 8.3.1文章

ベンチマークプログラムpgbenchの使い方や、ベンチマークをする上での注意点についても説明があります。(しかしいつの間にかずいぶん色んな機能がついてますね)。

まず第一に、数秒で終わる試験を決して信用しないでください。 -t設定を増やして、雑音を取り除くために、少なくとも数分試験にかかるようにしてください。 再現可能な数値を得るために数時間必要になる場合もあります。

pgbench - PostgreSQL 8.3.1文章

ふむふむ。

デフォルトのTPC-Bのような試験シナリオでは、初期倍率(-s)を試験予定のクライアント数(-c)の最大値と同程度にしなければなりません。 branchesテーブルには-s行しかありません。 また、前トランザクションはその内の1つを更新しようとします。 ですので、-c値を-sより大きくすると、他のトランザクションを待機するためにブロックされるトランザクションが多くなることは間違いありません。

pgbench - PostgreSQL 8.3.1文章

なるほど、、、考えたこともありませんでしたorz

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20080428