58

postgresql 8.4で現在のシーケンス値を取得するにはどうすればよいですか?

注:ある種の統計の値が必要です。取得して保存するだけです。手動でインクリメントする場合の同時実行性と競合状態に関連するものは、質問とは関係ありません。

注2:シーケンスは複数のテーブルで共有されます

注3:次currvalの理由で機能しません:

  • 現在のセッションでこのシーケンスのnextvalによって最後に取得された値を返します
  • ERROR: currval of sequence "<sequence name>" is not yet defined in this session

私の現在の考え:奇妙なDDLを解析することです

4

2 に答える 2

112

あなたは使用することができます:

SELECT last_value FROM sequence_name;

更新:これはCREATESEQUENCEステートメントに文書化されています。

シーケンスを直接更新することはできませんが、次のようなクエリを使用できます。

SELECT*FROM名;

シーケンスのパラメータと現在の状態を調べます。特に、シーケンスのlast_valueフィールドには、任意のセッションによって割り当てられた最後の値が表示されます。(もちろん、他のセッションがnextval呼び出しをアクティブに実行している場合、この値は印刷されるまでに廃止される可能性があります。)

于 2013-02-15T00:11:25.363 に答える
3

シーケンスがテーブル内の一意のIDに使用されている場合は、次のようにするだけです。

select max(id) from mytable;

最も効率的な方法は、postgres固有ですが、次のとおりです。

select currval('mysequence');

技術的には、これはへの呼び出しによって生成された最後の値を返しますがnextval('mysequence')、これは必ずしも呼び出し元によって使用されるとは限りません(未使用の場合、自動インクリメントID列にギャップが残ります)。

于 2013-02-14T23:42:49.813 に答える