UNIXタイムスタンプのPostgreSQLフィールドタイプ:
- UNIXタイムスタンプとして保存する
- UNIXタイムスタンプとしても取得します。
日付/時刻タイプpostgreSQLV9.1を通過しました。
- 整数が最善の方法ですか!?(これは、MySQLを使用していたときに行ったことです。使用していました
int(10)
)
UNIXタイムスタンプのPostgreSQLフィールドタイプ:
日付/時刻タイプpostgreSQLV9.1を通過しました。
int(10)
)現在のUNIXエポックタイムスタンプ(2014-04-09)は1397071518です。したがって、少なくともこれだけの数を格納できるデータ型が必要です。
どのようなデータ型が利用できますか?
数値型に関するPostgreSQLのドキュメントを参照すると、次のオプションが見つかります。
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
それは時間表現の観点からどういう意味ですか?
これで、これらの数値を取得し、エポックコンバーターを使用して日付に変換できます。
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
最後の例では、秒を使用すると、これまでのところ過去と未来になり、おそらく問題にならないことに注意してください。私が与えた結果は、UNIXエポックをミリ秒で表した場合のものです。
それで、私たちは何を学びましたか?
smallint
明らかに悪い選択です。integer
今のところ適切な選択ですが、ソフトウェアは2038年に爆発します。Y2Kの黙示録は2038年問題には何もありません。bigint
するのが最良の選択です。医師はまだそれを批判するかもしれませんが、これは考えられるほとんどの人間のニーズに対して将来にわたって保証されています。タイムスタンプをISO8601標準などの別の形式で保存するのが最善ではないかどうかを検討する場合としない場合があります。
TIMESTAMP WITH(OUT)TIME ZONEを使用し、必要に応じてEXTRACTを使用してUNIXタイムスタンプ表現を取得します。
比較
SELECT NOW();
と
SELECT EXTRACT(EPOCH FROM NOW());
postgresqlは符号なし型をサポートしていないため、整数は適切ですが、十分ではありません。