1

テーブルにid列があります。これは次のとおりです。

  id     BIGSERIAL NOT NULL PRIMARY KEY, ...

削除されたいくつかの行が1、10、11、12のような一貫性のないIDを取得した後...つまり、実際の行数はpgのシリアルIDと一致しません...私はどういうわけか行を数え直す必要があると思いました、そうですか?

4

1 に答える 1

2

ギャップのない順次識別子が必要な場合は、SERIALまたはBIGSERIALSEQUENCE)を使用しないでください。これはFAQです。シーケンスは、削除されたIDを再利用するだけでなく、トランザクションのロールバック時またはDBのクリーンでない再起動後にIDが破棄されるため、何も削除しなくても、シーケンスにギャップが生じる可能性があります。

「postgresqlギャップレスシーケンス」を検索します。

私はこれをここに少し書いた。

合成キーを使用している場合は、IDが別のIDと等しいかどうかだけを気にする必要があります。それらを比較して「AとBの間にあるIDの数」と言ってはいけません。SEQUENCEこれは、生成されたIDでは意味がありません。

于 2012-12-15T03:41:39.977 に答える