Transaction

刪除事務中的所有行:其他事務會發生什麼?

  • January 19, 2018

我目前在 PostgreSQL 中有一個函式,它創建一個臨時表,填充它,執行一些棘手的選擇並返回結果。postgresql 的臨時表對於函式是本地的,因此這有助於我避免在臨時表中引入另一列來標記由函式的特定執行插入的所有行。如果我使用了一個需要的全域表,並且由於我的查詢的性質,它會降低性能。

我想將這段程式碼移植到 VoltDB,但它不支持從儲存過程創建臨時表。這讓我想到了其他方法。如果儲存過程將啟動一個事務並刪除表中的所有行(不是臨時),那麼此時執行的同一儲存過程的其他執行會發生什麼?

或者,如果在刪除之後,儲存過程開始插入行,而另一個會話呼叫相同的 sp,它將再次刪除所有行,那該怎麼辦?

簡而言之,我可以通過刪除所有行,插入一些行,然後對插入的行執行查詢,然後在 sp 執行結束(和事務送出)之前再次刪除所有行來創建事務中數據的本地(到 sp 執行)視圖嗎? )?

這將使我避免對臨時行使用 rowset_id 列,從而避免連接速度慢得多(這是 EAV 實現)。

a_horse_with_no_name的評論實際上是答案,但由於它沒有作為答案發布,所以我無法這樣標記。我完全忘記了事務隔離級別,我在 VoltDB 論壇上問過這個問題,看來只要確保儲存過程是節點本地的(抱歉,這有點像 VoltDB 術語),那就是,它們不會跨分區表處理數據,這應該可以工作。

引用自:https://dba.stackexchange.com/questions/30665