Der Unix Epoche Zeitstempel ist jetzt (2014-04-09) ist 1397071518. Wir brauchen also einen Datentyp, der in der Lage ist, eine Nummer mindestens so groß zu speichern.
Welche Datentypen sind verfügbar?
Wenn Sie die PostgreSQL documentation on numeric types finden Sie folgende Optionen finden:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
Was das in Bezug auf die Zeitdarstellung bedeutet?
Jetzt können wir diese Zahlen nehmen und sie in Daten umwandeln mit einem epoch converter:
Name Size Minimum Date Maximum Date
smallint 2 bytes 1969-12-31 1970-01-01
integer 4 bytes 1901-12-13 2038-01-18
bigint 8 bytes -292275055-05-16 292278994-08-17
Beachten Sie, dass in letzter Instanz Sekunden mit Ihnen so weit in die Vergangenheit versetzt und die Zukunft, dass es wahrscheinlich ist egal. Das Ergebnis, das ich angegeben habe, ist, wenn Sie die Unix-Epoche in Millisekunden darstellen.
Also, was haben wir gelernt?
smallint
ist eindeutig eine schlechte Wahl.
integer
ist eine anständige Wahl für den Moment, aber Ihre Software wird im Jahr 2038 explodieren. Die Y2K-Apokalypse hat nichts auf der Year 2038 Problem.
- Mit
bigint
ist die beste Wahl. Dies ist zukunftssicher gegen die meisten denkbaren menschlichen Bedürfnisse, obwohl the Doctor kann noch criticise es.
Sie können oder prüfen, möglicherweise nicht, ob es nicht am besten sein könnte Ihren Zeitstempel in einem anderen Format wie der ISO 8601 Standard zu speichern.
Ich denke, ich kann das mit einem Check kontern, damit es sich wie eine vorzeichenlose Nummer verhält. – ThinkingMonkey
bis 2038 ist das kein problem :) – CyberDem0n
wahrscheinlich bigint dann verwenden. Aber es wäre nicht gut, die zusätzlichen Bits zu speichern. – ThinkingMonkey