[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 メーリングリストの案内