UNIXタイムスタンプのPostgreSQLフィールドタイプ:
int(10)
を使用していました)整数は適切ですが、十分ではありません。postgresqlは符号なしの型をサポートしていないためです。
現在の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
それは時間表現に関して何を意味しますか?
これで、これらの数値を取得して、 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
最後の例では、秒を使用すると、過去と未来が遠いため、おそらく問題ではないことに注意してください。私が与えた結果は、Unixエポックをミリ秒単位で表す場合です。
それで、私たちは何を学びましたか?
smallint
は明らかに悪い選択です。integer
は現時点では適切な選択ですが、ソフトウェアは2038年に爆発します。Y2Kの黙示録は 2038年問題 に関して何もありません。bigint
を使用するのが最良の選択です。これは、考えられるほとんどの人間のニーズに対して将来保証されていますが、 the Doctor はまだ criticise それ。タイムスタンプを ISO 8601 標準などの別の形式で保存するのが最善ではないかどうかを検討する場合としない場合があります。
TIMESTAMP WITH(OUT)TIME ZONEを使用して、必要に応じてEXTRACTを使用してUNIXタイムスタンプ表現を取得します。
比較する
SELECT NOW();
と
SELECT EXTRACT(Epoch FROM NOW());
質問に否定的な票がある理由がわかりません。
とにかく、Database Administratorsサイト(多くの賛成票)で 密接に関連した質問 を見つけました。
この非自明なトピックに関するより完全な情報があるので、これはただそこを見ることを提案することです。