Postgresql 8.4で現在のシーケンス値を取得するにはどうすればよいですか?
注:何らかの統計の値が必要です。取得して保存するだけです。手動でインクリメントする場合、並行性と競合状態に関連するものはありません。質問には関係ありません。
注2:シーケンスは複数のテーブルで共有されます
注3:currval
は次の理由で機能しません。
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
私の現在のアイデア:DDLを解析することです。これは奇妙です
次を使用できます。
SELECT last_value FROM sequence_name;
Update:これは CREATE SEQUENCE ステートメントに記載されています:
シーケンスを直接更新することはできませんが、次のようなクエリを使用できます。
SELECT * FROM name;
シーケンスのパラメーターと現在の状態を調べる。特に、シーケンスのlast_valueフィールドには、セッションによって割り当てられた最後の値が表示されます。 (もちろん、他のセッションがnextval呼び出しをアクティブに実行している場合、この値は出力される時点で廃止される可能性があります。)
シーケンスがテーブル内の一意のIDに使用されている場合、これを簡単に行うことができます。
_select max(id) from mytable;
_
最も効率的な方法は、postgres固有ですが、次のとおりです。
_select currval('mysequence');
_
技術的には、これはnextval('mysequence')
の呼び出しによって生成された最後の値を返しますが、これは必ずしも呼び出し側によってsedであるとは限りません(未使用の場合、自動インクリメントID列にギャップが残ります) 。