[pgsql-jp: 40241] Re: トランザクション ID の最大値
Takahiro Itagaki
itagaki.takahiro @ oss.ntt.co.jp
2010年 3月 29日 (月) 09:56:56 JST
tanaka <tanaka_hideo @ yahoo.co.jp> 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 @ oss.ntt.co.jp>
pgsql-jp メーリングリストの案内