-1
我試圖插入數據到數據庫使用JDBC, 這樣做時,我必須禁用約束 - 檢查,非空,外鍵。由jdbc禁用postgresql約束
alter table user_table disable trigger all;
我已經嘗試過上述查詢,它不起作用。
我需要一種方法來禁用程序啓動時的所有約束,當事務完成時,我需要啓用約束。
我正在使用JDBC4和Postgresql 9.0。
我試圖插入數據到數據庫使用JDBC, 這樣做時,我必須禁用約束 - 檢查,非空,外鍵。由jdbc禁用postgresql約束
alter table user_table disable trigger all;
我已經嘗試過上述查詢,它不起作用。
我需要一種方法來禁用程序啓動時的所有約束,當事務完成時,我需要啓用約束。
我正在使用JDBC4和Postgresql 9.0。
的documentation of PostgreSQL說了ALL
部分:
禁用或啓用屬於該表的所有觸發器。 (這需要超級用戶權限如果任何觸發器內部產生約束觸發器,如那些用於實現外鍵約束或推遲的獨特性和排除約束。)
所以我猜用戶您正在使用插入數據不是超級用戶,因爲您在您的問題中列出外鍵檢查。
不過:除非你的要求是非常特別我認爲你是錯誤的路線上:
禁用檢查/觸發一起是一個非常大的槍這很容易擊毀您的數據的一致性。而且,由於您希望在交易結束時重新啓用支票,您似乎不希望這樣做。
如果在開始時可以使用可延遲的約束,那會更好。然後您可以使用自動綁定到事務範圍的SET CONSTRAINTS命令。你可以確定你的一致性沒有風險。查找關於可延遲觸發器的文檔CREATE TABLE。
你是如何執行alter table語句(代碼)? – Ash
「*不起作用*」既不是有效的PostgreSQL錯誤消息,也不是有效的Java異常 –