[pgsql-jp: 31495] Re: TRIGGERの中で使用する「 now」について

bxcel bxcel @ prophet.jp
2003年 11月 18日 (火) 20:22:03 JST


松本と申します。

鈴木さん情報ありがとうございました。

> まずは、マニュアルのこちらを参照してみて下さい。
> http://www.postgresql.jp/document/pg734doc/user/functions-datetime
> .html#FUNCTIONS-DATETIME-CURRENT
>
> CURRENT_TIMESTAMP だと正しく動く理由が記載されているはずです。

拝見させて頂きました。
「now() と CURRENT_TIMESTAMP は同じ」という事と、
「トランザクションが開始された時間」という事が読み取れました。

今回の場合、トランザクションは明示的に指定していないので、
update文ごとに異なるトランザクションという扱いになると
思いますので、「トランザクションが開始された時間」となって
いないように思うのですが。

> VALUE句で now を指定していますが、
> 関数 now() にするべきではないでしょうか?

now()に書き換えてみましたが、結果は同じでした。

さらにいろいろとやってみた所、現在時刻をINSERT文のVALUES句に
書いた場合と、テーブルのDEFAULTに書いた場合で違いはなく、
CURRENT_TIMESTAMPとnow()で動作が異なっているようです。

        | now() | CURRENT_TIMESTAMP
--------+-------+------------------
DEFAULT |   ●  |       ○
INSERT  |   ●  |       ○

という関係のようです。
つまり、CURRENT_TIMESTAMPを使用すれば、INSERT文のVALUES句に
書いてもテーブルのDEFAULTに書いても意図した結果となるようです。
ただ、こうなるとnow()がいつの時間を示すのか気になりますね。




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