假設我在PostgreSQL中有以下存儲過程。 (請注意,這不是真正的代碼。我知道這可以用另一種更好的方式來完成,這只是一個例子來說明我的問題)PostgreSQL函數是原子嗎? (ID生成)
比方說,兩個不同的用戶運行這個幾乎在同時。他們可以得到相同的身份證件嗎?換句話說,我會嘗試解釋一下。在代碼中,我評論了兩條語句。如果兩個用戶同時運行它。聲明以什麼順序調用。我可以肯定這將是這樣的:
- 用戶聲明1
- 用戶聲明2
- 用戶B聲明1
- 用戶B聲明2
或可能是像這樣(導致相同的ID):
- 用戶A聲明1
- 用戶B聲明1
- 用戶聲明2
- 用戶B聲明2
我希望你明白我的問題。我真的試圖尋找網絡的答案,但沒有運氣。這可能是因爲我沒有任何名字?這叫什麼?
非常感謝您的幫助。
非常感謝您的回答,並鏈接到偉大的文章!我只是使用ID示例來說明我的問題。這不是我在實際工作中試圖做的事情。對於我的真實工作,無法編輯SQL或使用「FOR UPDATE」。也許我必須查看文章中提到的SERIALIZABLE事務。但我不喜歡的是第二次會議被中止。存儲過程是否不可能像單條語句一樣工作?因此,如果兩個會話同時啓動,其中一個會等待另一個完成,然後運行? – Thomas 2014-09-21 18:26:29