Von welchem Rechner kommt die Zeit ?

Hallo,

wenn ein Client ein Update/Insert mit now() macht, ist das dann die Zeit des Rechners auf dem der Client läuft oder die des Db Servers ?

Ich habe eine unlogische Zeitstempel in einer Log Tabelle die ich mir anders nicht erklären kann. Falls dem so ist, kann ich erzwingen, dass now() die Serverzeit ist ?
Rolf

Server

Ich habe eine unlogische Zeitstempel in einer Log Tabelle die ich mir anders nicht erklären kann. Falls dem so ist, kann ich erzwingen, dass now() die Serverzeit ist ?
Rolf

Sie ist es. Was manche Leute verwirrt ist die Tatsache, daß now() innerhalb einer Transaktion scheinbar stehen bleibt. Aber ob das Dein Problem ist, weiß ich nicht, da fehlen die Details.

Andreas

Hier sind sie:

hier die Einträge in der Statustabelle, werden alle von einer rule durchgeführt:

id | time_stamp | obj_id | status | obj_name
-------±---------------------------±-------±------------±------------
12017 | 2007-03-07 12:26:04.047037 | 29 | JOB_OK | jobs
11981 | 2007-03-07 12:24:18.467981 | 29 | JOB_WORK | jobs
11967 | 2007-03-07 12:24:47.653752 | 29 | JOB_PREPARE | jobs
11966 | 2007-03-07 12:24:47.653752 | 29 | NEU | jobs


An der id sieht man die zeitliche Reihenfolge, in der die Records angelegt wurden (sequence), nur die Zeitstempel passen nicht:
status NEU und JOB_PREPARE sind OK (das passiert quasi gleichzeitig),
nur JOB WORK wird durch ein anderes Programm, welches auf einem anderen Rechner läuft gesetzt ( per UPDATE auf eine Tabelle jobseiten, dort setzt ein Trigger den Status von jobs, dann trägt eine Rule das in die Tabelle oben ein. ) nur soll das ganze 27 Sekunden bevor der datensatz angelegt wurde passiert sein was ja nicht geht…
Seltsam …

rolf schaufelberger schrob am 4935. September 1993:

status NEU und JOB_PREPARE sind OK (das passiert quasi gleichzeitig), nur JOB
WORK wird durch ein anderes Programm, welches auf einem anderen Rechner läuft
gesetzt ( per UPDATE auf eine Tabelle jobseiten, dort setzt ein Trigger den
Status von jobs, dann trägt eine Rule das in die Tabelle oben ein. ) nur soll
das ganze 27 Sekunden bevor der datensatz angelegt wurde passiert sein was ja
nicht geht… Seltsam …

Das ergibt durchaus Sinn, wenn die Transaktion 27 Sekunden vor Anlegen des
Datensatzes gestartet wurde. Bei Verwendung von now() ist nicht der Zeitpunkt
des UPDATEs relevant, sondern der Startzeitpunkt der Transaktion.

Gruß
Andreas

G-nau. Als Beispiel und Lösungsansatz biete ich noch:

test=# select timeofday();
              timeofday
-------------------------------------
 Wed Mar 07 16:02:29.658254 2007 CET
(1 row)

test=*# select now();
              now
-------------------------------
 2007-03-07 16:02:29.642367+01
(1 row)

Der Lösungsansatz wäre hier timeofday() anstatt now().

Andreas

Aha! Das now mit Begin eingefroren wird, war mir neu.
Im Grunde muss ich mal sehen, wo das in meiner Anwendung passiert, ich verwende hier Perl/DBD/ und Class: :smiley: BI mit AutoCommit => 0
mache aber keine explizites begin_transaction sondern nur ein commit nach dem update.
Danke mal für den Hinweis.
Rolf