2012-12-21 94 views
-1

我試圖插入數據到數據庫使用JDBC, 這樣做時,我必須禁用約束 - 檢查,非空,外鍵。由jdbc禁用postgresql約束

alter table user_table disable trigger all; 

我已經嘗試過上述查詢,它不起作用。

我需要一種方法來禁用程序啓動時的所有約束,當事務完成時,我需要啓用約束。

我正在使用JDBC4和Postgresql 9.0。

+1

你是如何執行alter table語句(代碼)? – Ash

+3

「*不起作用*」既不是有效的PostgreSQL錯誤消息,也不是有效的Java異常 –

回答

3

documentation of PostgreSQL說了ALL部分:

禁用或啓用屬於該表的所有觸發器。 (這需要超級用戶權限如果任何觸發器內部產生約束觸發器,如那些用於實現外鍵約束或推遲的獨特性和排除約束。)

所以我用戶您正在使用插入數據不是超級用戶,因爲您在您的問題中列出外鍵檢查。

不過:除非你的要求是非常特別我認爲你是錯誤的路線上:

禁用檢查/觸發一起是一個非常大的槍這很容易擊毀您的數據的一致性。而且,由於您希望在交易結束時重新啓用支票,您似乎不希望這樣做。

如果在開始時可以使用可延遲的約束,那會更好。然後您可以使用自動綁定到事務範圍的SET CONSTRAINTS命令。你可以確定你的一致性沒有風險。查找關於可延遲觸發器的文檔CREATE TABLE