首頁 >資料庫 >mysql教程 >如何重置與表格行不同步的 Postgres 主鍵序列?

如何重置與表格行不同步的 Postgres 主鍵序列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-23 11:41:10365瀏覽

How Can I Reset a Postgres Primary Key Sequence Out of Sync with Table Rows?

解 PostgreSQL 主鍵序列差異

主鍵序列與表格的行未對齊可能會導致令人沮喪的重複鍵錯誤。這種情況經常發生在資料匯入或復原過程中,其中序列完整性未被保留。 解決方法如下:

1。找到最大的ID:

使用MAX()函數來辨識表中最大的ID:

<code class="language-sql">SELECT MAX(id) FROM your_table;</code>

2。取得序列的下一個值:

此查詢顯示序列的下一個產生值:

<code class="language-sql">SELECT nextval('your_table_id_seq');</code>

3。重置序列(如果需要):

如果序列的下一個值小於表的最大 ID,則在交易內重置序列以防止並發插入:

<code class="language-sql">BEGIN;
LOCK TABLE your_table IN EXCLUSIVE MODE;
SELECT setval('your_table_id_seq', (SELECT GREATEST(MAX(your_id), nextval('your_table_id_seq') - 1) FROM your_table));
COMMIT;</code>

資料來源:改編自 Ruby 論壇討論。

以上是如何重置與表格行不同步的 Postgres 主鍵序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn