Type de champ PostgreSQL pour l'horodatage Unix:
Ont traversé Types de date/heure postgreSQL V 9.1 .
int(10)
)entier serait bon, mais pas assez bon, car postgresql ne prend pas en charge les types non signés
L'horodatage Unix Epoch en ce moment (2014-04-09) est 1397071518. Nous avons donc besoin d'un type de données capable de stocker un nombre au moins aussi grand.
Quels types de données sont disponibles?
Si vous vous référez à PostgreSQL documentation sur les types numériques vous trouverez les options suivantes:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
Qu'est-ce que cela signifie en termes de représentation temporelle?
Maintenant, nous pouvons prendre ces nombres et les convertir en dates à l'aide d'un convertisseur d'époque :
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
Notez que dans le dernier cas, l'utilisation des secondes vous place si loin dans le passé et le futur que cela n'a probablement pas d'importance. Le résultat que j'ai donné est pour si vous représentez l'époque unix en millisecondes.
Alors, qu'avons-nous appris?
smallint
est clairement un mauvais choix.integer
est un choix décent pour le moment, mais votre logiciel explosera en l'an 2038. L'apocalypse Y2K n'a rien sur le problème de l'an 2038 .bigint
est le meilleur choix. Ceci est à l'épreuve du futur contre la plupart des besoins humains imaginables, bien que le docteur = peut encore critiquer cela.Vous pouvez ou non vous demander s'il n'est pas préférable de stocker votre horodatage dans un autre format tel que la norme ISO 8601 .
Je voudrais simplement utiliser TIMESTAMP WITH (OUT) TIME ZONE et utiliser EXTRACT pour obtenir une représentation d'horodatage UNIX lorsque vous en avez besoin.
Comparer
SELECT NOW();
avec
SELECT EXTRACT(Epoch FROM NOW());
Je ne comprends pas pourquoi la question a des votes négatifs.
Quoi qu'il en soit, j'ai trouvé un question étroitement liée dans le site Administrateurs de base de données (avec de nombreux votes positifs).
Il s'agit simplement de suggérer d'y jeter un œil, car il existe des informations beaucoup plus complètes sur ce sujet non trivial.