INSERTまたはUPSERT(ON CONFLICT UPDATE)を実行するたびに、各テーブルのインクリメントカラムは、その前のアップデート数でインクリメントされます。例えば各更新時にPostgreSQL自動インクリメントが増加する
、私はこのテーブルがある場合:
id int4
title text
description text
updated_at timestamp
created_at timestamp
をそして、これらのクエリを実行します。
INSERT INTO notifications (title, description) VALUES ('something', 'whatever'); // Generates increments ID=1
UPDATE notifications title='something else' WHERE id = 1; // Repeat this query 20 times with different values.
INSERT INTO notifications (title, description) VALUES ('something more', 'whatever again'); // Generates increments ID=22
は、これは非常に大きな問題です。実行中のスクリプトは毎日100,000件以上の通知を処理します。これにより、各インサートの間に10,000のオーダーのギャップができるので、100行から開始することができますが、1,000行に達するまでに、その最後の行に対して100000を超える自動インクリメントのプライマリキーID値があります。
これが続くと、テーブルの自動インクリメント値がすぐに使い果たされます。
PostgreSQLサーバの設定が間違っていますか? Postgresの使用9.5.3。
私はEloquent Schema Builder(例:$table->increments('id')
)を使用してテーブルを作成していますが、そのテーブルと何か関係があるかどうかはわかりません。
"*これが続く場合は、テーブルの自動インクリメント値がすぐに使い果たされます。毎秒10.000の値**を24時間365日(何も休止なし)に燃やすと、(bigint)値がなくなるまでに29.247.120年かかるでしょう –