increment_counterを使用していくつかの整数列をインクリメントしていくつかのレコードIDを渡し、次にModel.firstを使用して最初のレコードを取得しようとすると、レコードIDに1を返します。postgreSQLの奇妙な振る舞いを使用してカウンタとレールを最初にインクリメント
このような何か:
Model.increment_counter :field, id
Model.first
それは
Model.find(1)
しかし
ない返しますModel.find(id+1)
これはpostgreSQLの特有の問題ですか?
これは私に問題ありません。私は、なぜpostgreSQLのデフォルトソートがidではないのか理解したいだけです。デフォルトのpostgreソートはどれですか? –
PostgreSQLのドキュメント「ソートが選択されていない場合、行は不特定の順序で返されます。私は実際には彼らが作成された順序で返されると思います(IDではなく、IDを変更しない場合は通常同じです)。したがって、あなたがIDでソートされていることを確認する必要があるときはいつでも、 'order(" id ")'を呼び出す必要があります。 –
実際には、ライブ行がディスク上に表示される順序です。フィルファクタはそれにも大きな影響を与えることができます。 –