2010年3月29日

[pgsql-jp: 40241] Re:トランザクション ID の最大値


tanaka <tanaka_hideo@xxxxx> wrote:

> 1. age() は、元々 日付関数ですが、なぜ、xid をage()関数を使用して表現す
> るのでしょうか?

引数が日付とXIDとで異なる関数としてオーバーロードされています。
=# \df age

関数一覧
スキーマ | 名前 | 結果のデータ型 | 引数のデータ型 | 型
------------+------+----------------+----------------------------------------------------------+----------------
pg_catalog | age | interval | timestamp with time zone | normal(通常)
pg_catalog | age | interval | timestamp with time zone, timestamp with time zone | normal(通常)
pg_catalog | age | interval | timestamp without time zone | normal(通常)
pg_catalog | age | interval | timestamp without time zone, timestamp without time zone | normal(通常)
pg_catalog | age | integer | xid | normal(通常)
(5 行)

> 2. なぜ、マイナスが未来を表すのでしょうか?(マイナスが未来を表す事に決め
> たのでしょうか?)

そういう定義ですね。過去がプラス、現在がゼロなので、未来がマイナスになるのは
自然だとは思います。日付関数版も、未来だとマイナスの値が返りますね。

=# SELECT age(timestamp '2011-03-29');
age
----------
-1 years
(1 行)

> 3. トランザクションIDの周回は、過去と未来が逆転してしまうので、周回が発生
> しないように定期的にvacuumを実行する必要がある という事でしょうか?

はい、その通りです。「トランザクションIDの周回エラーの防止」に説明があります。
http://www.postgresql.jp/document/8.1/html/maintenance.html#VACUUM-FOR-WRAPAROUND
8.1 だと、周回が迫ると VACUUM 以外のSQL を受け付けなくなって、サービスが
停止してしまうのでご注意を。バージョン 8.2 以降であれば、周回しそうになると
勝手に autovacuum が起動して、自動的に周回エラーを防止してくれます。

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro@xxxxx>

投稿者 xml-rpc : 2010年3月29日 09:56
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/94620
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。