Ergebnis 1 bis 6 von 6

Thema: Von welchem Rechner kommt die Zeit ?

  1. #1
    Registriert seit
    06.10.2006
    Beiträge
    44

    Standard 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

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von rolf.schaufelberger Beitrag anzeigen
    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 ?
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Registriert seit
    06.10.2006
    Beiträge
    44

    Standard

    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 ....

  4. #4
    ansel ist offline Neuer Benutzer
    Registriert seit
    27.01.2007
    Beiträge
    7

    Standard Re: Von welchem Rechner kommt die Zeit ?

    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

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von ansel Beitrag anzeigen
    rolf schaufelberger schrob am 4935. September 1993:

    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:

    Code:
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    Registriert seit
    06.10.2006
    Beiträge
    44

    Standard

    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:BI mit AutoCommit => 0
    mache aber keine explizites begin_transaction sondern nur ein commit nach dem update.
    Danke mal für den Hinweis.
    Rolf

Ähnliche Themen

  1. Problem Datenbankserver auf neuem Rechner starten
    Von palaretta im Forum Konfiguration
    Antworten: 0
    Letzter Beitrag: 30.06.2011, 20:36
  2. Antworten: 3
    Letzter Beitrag: 17.01.2011, 12:30
  3. PostgreSQL mehrfach auf einem Rechner installieren
    Von Ylrach im Forum Sonstige Installationsprobleme
    Antworten: 5
    Letzter Beitrag: 21.12.2007, 16:08
  4. query-zeit limitieren
    Von gnoerz im Forum SQL
    Antworten: 2
    Letzter Beitrag: 13.09.2006, 22:30
  5. Backup auf einem - Restore auf anderem Rechner?
    Von Kretzsche im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 13.02.2006, 22:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum