2011-10-03 378 views
0

我在調用一個函數,它有超過200個使用JAVA的DROP表語句,我得到的是org.postgresql.util.PSQLException:錯誤:共享內存不足。 我應該遵循什麼方法以避免共享Memomry?org.postgresql.util.PSQLException:錯誤:共享內存不足

PS:限制是我不能更改任何有關PostgresSQL的參數。

+0

「功能」是指服務器端函數還是Java方法?是服務器端還是客戶端的異常的原因?即使猜測,你的小信息也不能提供足夠的信息。 –

+0

通過函數我的意思是一個PostgresSQL函數(過程)。這個異常是在我調用JAVA端函數的地方。 –

回答

1

如果錯誤的原因在服務器端:在PostgreSQL中,一個函數總是在一個事務中執行。 DO塊是匿名函數,並以相同的方式處理。而且因爲即使是DML命令(例如CREATEDROP)在PostgreSQL中也是事務性的,這些命令也會強調用於ROLLBACKCOMMIT的常用資源。

我的猜測是,大量的大桌子吃掉了很多的記憶。 所以如果你不需要函數中的事務行爲,最簡單的方法就是將大函數分成幾個較小的函數。在單獨的事務中調用每個函數。