「なんとなく気持ちが悪い」と思った次第です。考えてみるとあまり悩む必要がないような気がしてきました。oracleのシーケンスは10の27乗が最大値のはずです。上限は存在しますが、実用上無限と考えられている訳です。上無限という点ではoracleのシーケンスと同様でしょう。この手の事は、感覚で判断するのではなく、理性と言うと少々大袈裟、計算によって判断する事が宜しいでしょう。auto_incrementなbigintフィールドを主キーとすれば、毎秒100万レコードを挿入するとしても58万年位は持つ計算になります。oracleのシーケンスなら31兆年ですね。えっと、考え方は渡辺さんと同じだと思っています。私見とすれば、時間のみを主キーにする事も十分にアリでしょう。ミリ秒、10ミリ秒程度の粒度を持つ時間型なら、ですが。DBアクセスのエラーハンドラ中に、一意違反の場合は再行するコードを追加するだけです。再行を前提としているなんて贅沢は出来ないとか、再行が再行を呼んでしまうとかの、忙しいアプリケーションであれば勿論その様な手は禁じ手でしょう。ケースバイケースですね。<tonegawa]。