web-dev-qa-db-ja.com

UNIXタイムスタンプのPostgreSQLフィールドタイプ?

UNIXタイムスタンプのPostgreSQLフィールドタイプ:

  • uNIXタイムスタンプとして保存する
  • uNIXタイムスタンプとしても取得します。

日付/時刻型 postgreSQL V 9.1


  • 整数が最善の方法ですか? (これは、MySQLを使用していたときに行ったことです。int(10)を使用していました)
47
ThinkingMonkey

整数は適切ですが、十分ではありません。postgresqlは符号なしの型をサポートしていないためです。

3
CyberDem0n

現在の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エポックをミリ秒単位で表す場合です。

それで、私たちは何を学びましたか?

  1. smallintは明らかに悪い選択です。
  2. integerは現時点では適切な選択ですが、ソフトウェアは2038年に爆発します。Y2Kの黙示録は 2038年問題 に関して何もありません。
  3. bigintを使用するのが最良の選択です。これは、考えられるほとんどの人間のニーズに対して将来保証されていますが、 the Doctor はまだ criticise それ。

タイムスタンプを ISO 8601 標準などの別の形式で保存するのが最善ではないかどうかを検討する場合としない場合があります。

68
Richard

TIMESTAMP WITH(OUT)TIME ZONEを使用して、必要に応じてEXTRACTを使用してUNIXタイムスタンプ表現を取得します。

比較する

SELECT NOW();

SELECT EXTRACT(Epoch FROM NOW());
23
GordonM

質問に否定的な票がある理由がわかりません。

とにかく、Database Administratorsサイト(多くの賛成票)で 密接に関連した質問 を見つけました。

この非自明なトピックに関するより完全な情報があるので、これはただそこを見ることを提案することです。

6
jap1968