我有一個關於postgresql序列的問題。關於postgresql序列的問題
例如,對於bigserial數據類型,序列是否爲高級,然後檢索數字,即使插入/提交不成功,序列也不會回溯。這意味着下一次我可能會插入表中,這可能是序列號中的一個缺口。
Theres a before insert row trigger on my table and Im using psycopg2。
在此先感謝。
我有一個關於postgresql序列的問題。關於postgresql序列的問題
例如,對於bigserial數據類型,序列是否爲高級,然後檢索數字,即使插入/提交不成功,序列也不會回溯。這意味着下一次我可能會插入表中,這可能是序列號中的一個缺口。
Theres a before insert row trigger on my table and Im using psycopg2。
在此先感謝。
即使插入/承諾是 不成功,序列不 回溯。這意味着下一次我可能會插入表中,這可能是序列號中的一個缺口。
是的,那是真的,那很好。 一個人通常想要一個序列來獲取唯一表格中的值(通常是PK) 並且根本沒有差距。
如果您好奇:如果您考慮併發性,這是自然的行爲。假設事務T1插入一行,從序列中獲取PK1,使用該值在其他表中創建另一個記錄......同時(在T1提交之前),另一個事務T2在同一個表中插入一行。然後T1回滾和T2提交...
順便說一句:如果你想要一個「無間隙」的序列......首先問自己,如果你真的想要這樣做(通常你真的不需要 - 並要求經常指向你的設計中的一個概念性問題)......但如果你確實需要它,你可以閱讀this。
回溯將需要鎖定,直到完成。這會很糟糕,尤其是當10個表格都可以使用相同的順序時。如果您想要訂單,請不要使用序號,請使用類似row_number()的窗口功能。
感謝您的幫助。 – goh 2010-06-21 03:51:39
繼續上面:你真的不應該擔心代理鍵中的「空白」。這樣做(根據我的經驗)表明代理不夠不透明。就序列而言,保證單調遞增(除非重置),所以... – 2010-06-21 03:26:52
即使它增加也應該是多餘的 – 2010-06-21 03:32:40
沒錯,我知道了。感謝您的解釋。 – goh 2010-06-21 03:50:24