sql >> データベース >  >> RDS >> PostgreSQL

トランザクションをコミットするときにSERIAL値を原子的に設定します

    Postgres 9.5 この問題に関連する新機能が導入されました:タイムスタンプのコミット

    track_commit_timestamp postgresql.conf内 (そして再起動してください!)コミットタイムスタンプの追跡を開始します。次に、クエリを実行できます:

    SELECT * FROM tbl
    WHERE  pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
    

    "タイムスタンプ追跡のコミット" の章をお読みください PostgresWikiで。
    関連するユーティリティマニュアルの機能 。

    関数のボラティリティはVOLATILEのみです トランザクションID( xid )定義ごとにラップアラウンドできます。したがって、機能インデックスを作成することはできません
    IMMUTABLEを偽造する可能性があります 限られた時間枠でのアプリケーションの関数ラッパーの変動性。ただし、影響に注意する必要があります。詳細な説明付きの関連ケース:

    コミットのシーケンスのみに関心がある(絶対時間ではない)多くのユースケース(あなたのような?)では、 xminを使用する方が効率的かもしれません。 bigintにキャストします 「直接」( xmin ::text ::bigint )タイムスタンプをコミットする代わりに。 ( xid 内部的には符号なし整数であり、上半分は符号付き integerに適合しません。 。)繰り返しになりますが、xidラップアラウンドの可能性による制限に注意してください。

    同じ理由で、コミットのタイムスタンプは無期限に保存されません 。中小規模のデータベースの場合、 xid ラップアラウンドはほとんど発生しませんが、クラスターが十分に長く稼働している場合は、最終的には発生します。 "トランザクションIDラップアラウンドエラーの防止"<の章をお読みください。 / a> 詳細については、マニュアルを参照してください。




    1. Oracleの分割された文字列列に結合する

    2. Mysql除外レコード

    3. ExcelファイルとしてのPostgreSQLクエリ出力

    4. DELETEステートメントのMySQLLIMIT