[pgsql-jp: 25000] Re: date_part() milliseconds の ver.7.2.x での返り値は?

Jun Kitamura kitamura @ assiette.net
2002年 2月 28日 (木) 02:02:02 JST


北村です。

> 石井です.
> 
> > PostgreSQL 7.1.3 を使っています。
> > 7.2 を入れた方に実お願いです。
> 
> # どうして自分でやってみないんでしょうかね.プライベートに7.2をインス
> # トールすることなど,ディスク領域さえあれば簡単なのに...

申し訳ないです。怠慢でした。

> 問題は,source が TIMESTAMP のときの動作ですね.
> 
> test=# select current_timestamp,extract(milliseconds from current_timestamp);
>           timestamptz          | date_part 
> -------------------------------+-----------
>  2002-02-27 14:45:53.945529+09 |   945.529
> (1 row)

何故、current_timestamp で、マイクロセカンドまで出るんですか?
同じ SQL が、

test=# select current_timestamp,extract(milliseconds from current_timestamp);
       timestamp        | date_part
------------------------+-----------
 2002-02-28 00:40:51+09 |         0
(1 row)

となります・・。(7.1.3で実行)
now() や current_timestamp は、time() を使っているので秒までしか出ない・
・・ということだったと思いますが。
7.1.3 では、/src/backend/utils/adt/nabstime.c に GetCurrentAbsoluteTime()
(121行目)しかないですが、 7.2では GetCurrentAbsoluteTimeUsec()(187行目) 
ってのがありますね。
この中で gettimeofday() を使って、マイクロセカンドまで取得してるっぽいん
ですけど、バージョンにより current_timestamp の値が違うのはこのためですか
ね?(これ以上ソースを追えない)


とりあえずの解決策として、timeofday() の返り値が文字列なので、timestamp型
にキャストして time型にキャストすることにより目的の値は得られるようになり
ました。

test=# select timeofday(),date_part('milliseconds',timeofday()::datetime::time);
              timeofday              |    date_part
-------------------------------------+------------------
 Thu Feb 28 00:54:53.693292 2002 JST | 53693.9170000001
(1 row)

ありがとうございました。

> ソースを直すのは簡単ですが,マニュアルが正しいのかどうか今一つはっきり
> しないので本家に聞いてみます.
> # それとSQL99のスペックも調べてみます.
> # 今札幌に出張中なのでちょっと時間がかかるかも知れませんが...

よろしくお願いします。




pgsql-jp メーリングリストの案内