2017-08-15 80 views
0

我有問題的事務隔離,讓我們考慮兩種交易:更新子行鎖父行(外鍵,9.1)

首先交易1做一個更新的一排表1,然後,事務2在子表中引用一行中的更新,該子表引用來自表1中在事務1中更新的pk,分析事務我們可以看到一個鎖,事務2將被鎖定,直到事務1被提交或者回滾爲止,在那裏一種避免這種鎖定的方法?我的交易1不影響表2,因爲它是特定列中的更新。 P.S.我的PostgreSQL版本是9.1,我檢查過PostgresSQL 9.6,但它沒有發生,是否有任何解決方法?

回答

1

所採用的解決方案是將通常更新的列拆分成單獨的表,因爲Postgres不會阻塞父表。

1

您已經確定如何解決它:升級。 PostgreSQL 9.6有一個特性,FOR KEY SHARE鎖,外鍵使用它來避免在插入/更新子行時鎖定整行。該功能不在9.1中。

或者,您可以DROP約束和依靠應用程序來保持一致性。因爲不再有正式的外鍵關係,所以當插入/更新子行時,PostgreSQL將不再在父行上執行FOR SHARE行鎖。

+0

在這一刻我無法升級我的PostgreSQL,我找到了解決方法,我在我的帖子中寫了一個答案。謝謝。 –

相關問題