テーブルにid列があります。これは次のとおりです。
id BIGSERIAL NOT NULL PRIMARY KEY, ...
削除されたいくつかの行が1、10、11、12のような一貫性のないIDを取得した後...つまり、実際の行数はpgのシリアルIDと一致しません...私はどういうわけか行を数え直す必要があると思いました、そうですか?
テーブルにid列があります。これは次のとおりです。
id BIGSERIAL NOT NULL PRIMARY KEY, ...
削除されたいくつかの行が1、10、11、12のような一貫性のないIDを取得した後...つまり、実際の行数はpgのシリアルIDと一致しません...私はどういうわけか行を数え直す必要があると思いました、そうですか?
ギャップのない順次識別子が必要な場合は、SERIAL
またはBIGSERIAL
(SEQUENCE
)を使用しないでください。これはFAQです。シーケンスは、削除されたIDを再利用するだけでなく、トランザクションのロールバック時またはDBのクリーンでない再起動後にIDが破棄されるため、何も削除しなくても、シーケンスにギャップが生じる可能性があります。
「postgresqlギャップレスシーケンス」を検索します。
私はこれをここに少し書いた。
合成キーを使用している場合は、IDが別のIDと等しいかどうかだけを気にする必要があります。それらを比較して「AとBの間にあるIDの数」と言ってはいけません。SEQUENCE
これは、生成されたIDでは意味がありません。