2004年03月15日

PostgreSQLでシーケンス

本にシーケンスのことが載ってなかったので無いと思ったけど試しにグーグル先生に聞いてみるとどうやらあるらしい。まぁ普通はあるか、無いとめんどくさいし。
カウンターはシーケンスで作成してみる。
rainbowdb=# create sequence externalstoragetop cache 5 start 1;
CREATE SEQUENCE
作れたっぽい。

シーケンス使ってみる。
rainbowdb=# select nextval ('externalstoragetop');
nextval
---------
1
(1 row)

rainbowdb=# select nextval ('externalstoragetop');
nextval
---------
2
(1 row)
お、いい感じ。

と思ったけどCGIから使うとなぜか5ずつ増える・・・。
キャッシュに5を設定したからそれと関係が?と思ったら
---- 以下http://www.net-newbie.com/postgres/man/manl/create_sequence.l.htmlからの引用
cache オプションは連続番号が先にアロケートされてメモリに保存されて、高速アクセスが可能となります。最小値は 1 (つまりキャッシュしません)で、これがデフォルトとなります。 注意: 各バックエンドはそれぞれにアロケートした数をキャッシュします。現在のセッションでキャッシュされても使われなかった数は捨てられます。
---- ここまで
あらら。コレが原因かな。仕方なくキャッシュは無しで作成する。

シーケンス削除
DROP SEQUENCE externalstoragetop ;
入力してて気が付いたけどpsql上でTab押すとコマンド名オブジェクト名を補完してくれる。すげー便利だ。

オプション無しで作成
create sequence externalstoragetop;

今度はCGI上からでも無事動いた。
リロードするたびに素直にカウントアップするけどIP覚えるのとかめんどくさそうだし数は増えた方がいいからコレでイイかw

と言うことでTOPに追加。
Movable Typeの中に組み込もうかと思ったけどなかなか簡単にはいかない様子。MTタグを自分で作ればできるのか??
SSIにしようかと思ったけどCGIの出力をSSIに渡す事はできるのだろうか。不明。
と言うことで手軽にできるインナーフレームでカウンタCGIを呼び出すことに。
うう・・ダセェ・・・でも仕方ねぇ・・。

リロードすると素直にカウントアップするのでTOPページのページビューと言うことにしてみる。
リロードするとカウンタだけ一瞬遅れて表示されるのはつらい。

試しにPostgreSQL落としてページ開いてみる。
ふむ、インナーフレームの呼び出しに失敗するのかフレームの中は何も表示されない。
まぁこれはコレでイイかな。

Trackback on "PostgreSQLでシーケンス"

このエントリーのトラックバックURL: 

"PostgreSQLでシーケンス"へのトラックバックはまだありません。

Comment on "PostgreSQLでシーケンス"

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。