Postgresqlのシーケンススキップの問題を解決する
I. シーケンスの作成
CREATE SEQUENCE seq_bm_menuid
INCREMENT 1
MINVALUE 1
MAXVALUE 99999999999999999999
START 1
CACHE 5;
上記の文から、現在のシーケンスはキャッシュが5であることがわかります。
第二に、シーケンスジャンプ値問題に遭遇
ウェブアプリケーションがpostgresqlデータベースにアクセスし、nextval('seq_bm_menuid')でシーケンス値を取得し、ビジネステーブルに挿入したところ、ビジネステーブルのシーケンス値に対応するフィールドの値が連続せず、5間隔でジャンプしていることがわかりました。
図に示すように
III. ちょっとした実験をする
シーケンスジャンプの理由を把握するために、次の方法で小さな実験を行う:pgAdminで2つの新しいクエリウィンドウを作成し、それぞれ実行select nextval('seq_bm_menuid'); 文、ステートメントは、最初のクエリウィンドウで実行されると、戻り値シーケンス147です、ステートメントは2番目のクエリウィンドウで実行すると、戻り値はシーケンス152である。案の定、間隔はまだ5シーケンス値ああを生成するために、何が起こっているかを知るために、次を行うに続けています。
我々は、最初のクエリウィンドウに戻り、再び文を実行し、148のシーケンス値を返し、次に2番目のクエリウィンドウに、再び文を実行し、153のシーケンス値を返し、最後にここでシーケンスキャッシュは、セッションの役割であることを考え出した、我々は、実際に2つのセッション、5の各セッションキャッシュのpostgresqlデータベースを新しいクエリウィンドウが作成されます我々はついにシーケンスジャンプの理由が判明したように。
追記 PostGresqlのシーケンス開始値をリセットする
設定されたPostgresqlのシーケンス値を変更するシナリオはあまり一般的ではなく、一般的にはデータベースを不規則に使用する場合に存在する!
時々、データベースのシーケンスエラーの後、Detail: Key (xttblog_id)=(200007) already exists.のエラーメッセージが発生することがあります。これは、200007のシーケンスがすでに占有されていることを意味します。
このエラーを修正する方法は2つあります。
1つは、nextval関数を実行して、既存のキーをスキップすることです。
SELECT nextval('xttblog_id_seq');
また、シーケンスの開始値をリセットして、すでに存在するキーをスキップするケースもあります。
-- Sequence reset to 2020
alter sequence xttblog_id_seq restart with 2020
上記では、シーケンスを2020年にリセットしています。このシーケンスでは、2020年から始まり、2020年未満はスキップされます。
以上、個人的な体験談ですが、参考になれば幸いです。また、Script Houseをもっと応援してください。もし間違いや不十分な点があれば、遠慮なくアドバイスしてください。
関連
-
Postgresqlの行から列への高度な応用と要約のアイデア
-
Postgresqlへのリモートアクセスの設定方法(ファイアウォールの設定またはOFFが必要です。)
-
PostgreSQLでデータの一括インポートのパフォーマンスを向上させるn個の方法を説明します。
-
PostgreSQLで文字列が対象の文字列を含むかどうかを判断する様々な方法
-
postgreSQLのクエリ結果に自己インクリメントシーケンス演算が追加されました。
-
PostgreSQLはバッチ実行のためにSQLをファイルに実装しています。
-
PostgreSQLの自己インクリメント構文使用上の注意点
-
Postgresqlのセルフインクリメントidをキーにした場合の重複問題の解決
-
PostgreSqlのhash_code関数の使用法
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
postgresのjsonbプロパティの利用について
-
単語をソートするカスタム関数とそれをPostgreSQLで使用する(実装コード)
-
PostgreSQLでバッファキャッシュにデータを読み込む方法
-
どのように定期的にLinux上でpostgresqlのデータベースをバックアップする
-
GROUP BY句での定数使用に関するPostgreSQLの特別な制限について説明します。
-
PostgreSQLにおけるsequence、serial、identityの使い方の違いについて
-
Postgresqlのデータベースにおける配列の作成と変更に関する操作
-
oracle_fdwを介してOracleデータにアクセスするためのPostgreSQLの手順
-
postgresqlのjsonbデータの問い合わせと変更方法
-
PostgreSQLで時間指定タスクを実装する4つの方法