http://www.kunitake.org/chalow/2008-09-11-1.html
上の記事によると、MySQLではnow()はレプリケーションセーフであるがsysdate()はレプリケーションセーフでないと書かれてします。
PostgreSQLではどうなのでしょうか?
知りたいのは、now()やCURRENT_TIMESTAMPが、マスタとレプリケーションで必ず同じ値になるかどうかです。
よろしくお願いします。
同じ値になるという理解で合ってると思います。
PostgreSQLのレプリケーションはSQLより低レベルなWALと呼ばれる書き込みログベースでのレプリケーションなので異なったデータが入ることは無いはずです。
SQLのクエリレベルでのレプリケーションだとスレーブ側で評価が行われて値が異なってしまう危険性がありますが、PostgreSQLのレプリケーションではnow()やCURRENT_TIMESTAMPの値解決はマスタ側で行われて、その結果の静的な値が書き込まれるというログがレプリケーションされ、スレーブ側でその書き込みログを再生してデータ同期するイメージです。
http://www.postgresql.jp/document/current/html/wal.html
ご丁寧にありがとうございます。
2012/02/03 23:20:56WALベースだとTimeStampが同値になるかという点について、マニュアルのどこを見ても明示的には書かれていなかったのですが、もしかして常識(もしくは、WALの仕組みからして当然のことと帰結される)なのでしょうか。。。
だとしたら私の勉強不足ですね。
たしかに、もしWALのtimestampがログ読み取り時に評価されるとしたら、クラッシュ後のリカバリしたときにtimestampがリカバリ時の時間になってしまい、リカバリにならないですね。
2012/02/03 23:27:27よってWALには時間の直値がかかれてある、としか考えようがないですね。