65

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

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

日付/時刻タイプpostgreSQLV9.1を通過しました。


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

3 に答える 3

106

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

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

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

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

于 2014-04-09T19:40:17.497 に答える
30

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

比較

SELECT NOW();

SELECT EXTRACT(EPOCH FROM NOW());
于 2012-08-03T15:57:00.320 に答える
2

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

于 2012-08-03T16:00:09.980 に答える