39

簡単な質問があります。テーブルがあるとします。

 id   A   B
 1   Jon  Doe
 2   Foo  Bar

次の id の増分 (この場合は 3 ) を知る方法はありますか? データベースはPostgreSQLです!

Tnxたくさん!

4

3 に答える 3

72

ID を要求してそれを返したい場合はnextval()、データを挿入せずにシーケンスを進める を使用できます。

これがSERIAL列の場合は、次のように、テーブルと列の名前に基づいてシーケンスの名前を見つける必要があることに注意してください。

Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;

これらの ID が順番に返されるという確固たる保証はありません (シーケンスは ID を順番に生成しますが、複数のセッションが ID を要求してまだ使用していないか、ロールバックしINSERTて ID が再利用されない可能性があります)。 )しかし、それらが一意であるという保証があります。これは通常重要なことです。

実際に ID を使用せずにこれを頻繁に行うと、最終的に 32 ビットinteger列の可能なすべての値を使い果たす (つまり、表現可能な最大整数に達する) ことになりますが、それを使用する可能性が高い場合にのみ使用すると、その ID を持つ行を挿入しても問題ありません。

于 2013-08-14T13:27:55.613 に答える