9

日付または時刻に関連するフィールドを含まないテーブルがあります。それでも、レコード/行がいつ作成されたかに基づいてそのテーブルにクエリを実行したいと考えています。PostgreSQL でこれを行う方法はありますか?

PostgreSQLで直接行うことについての答えを好みます。しかし、それが不可能な場合、Hibernate は PostgreSQL でそれを行うことができますか?

4

1 に答える 1

6

基本的に:いいえ。PostgreSQL には行の自動タイムスタンプはありません。

私は通常、次のような列をテーブルに追加します (タイム ゾーンは無視します)。

ALTER TABLE tbl ADD COLUMN log_in timestamp DEFAULT localtimestamp NOT NULL;

その列の値を操作しない限り、作成タイムスタンプを取得できます。トリガーを追加したり、書き込み権限を制限したりして、値の調整を避けることができます。

セカンドクラスのオプション

  • 連続した列がある場合、少なくとも行が入力された順序をある程度の確率で知ることができます。INSERT値は手動で変更でき、アプリケーションはシーケンスから順不同で値を取得できるため、これは 100% 信頼できるわけではありません。

  • テーブルを作成した場合WITH (OIDS=TRUE)、OID 列は何らかの指標になる可能性があります。データベースが大量に作成されている場合や非常に古い場合を除き、OID ラップアラウンドが発生し、後の行の OID が小さくなる可能性があります。これが、この機能がほとんど使用されなくなった理由の 1 つです。

    default_with_oidsデフォルトはI quote the manualの設定に依存します:

パラメータはデフォルトでオフです。PostgreSQL 8.0 以前では、デフォルトでオンになっていました。

  • 行を更新していない場合、またはダンプ/復元サイクルを経ていない場合、または runVACUUM FULLまたはCLUSTER.. の場合、プレーンSELECT * FROM tblは入力された順序ですべての行を返します。しかし、これは非常に信頼性が低く、実装に依存します。ORDER BYPostgreSQL (他の RDBMS と同様) は、句のない順序を保証しません。
于 2012-07-28T05:28:15.017 に答える