我正在尝试使用 JDBC 将数据插入数据库,这样做时我必须禁用约束 - 检查、非空、外键。
alter table user_table disable trigger all;
我试过上面的查询它不起作用。
我需要一种在程序启动时禁用所有约束的方法,当事务完成时,我需要重新启用约束。
我正在使用 JDBC4 和 Postgresql 9.0。
我正在尝试使用 JDBC 将数据插入数据库,这样做时我必须禁用约束 - 检查、非空、外键。
alter table user_table disable trigger all;
我试过上面的查询它不起作用。
我需要一种在程序启动时禁用所有约束的方法,当事务完成时,我需要重新启用约束。
我正在使用 JDBC4 和 Postgresql 9.0。
PostgreSQL的文档对此部分说ALL
:
禁用或启用属于该表的所有触发器。(如果任何触发器是内部生成的约束触发器,例如用于实现外键约束或可延迟唯一性和排除约束的触发器,则这需要超级用户权限。)
所以我猜你用来插入数据的用户不是超级用户,因为你在你的问题中列出了外键检查。
但是:除非您的要求非常特殊,否则我认为您走错了路:
一起禁用检查/触发器是一把非常大的枪,它很容易破坏您的数据一致性。而且由于您想在交易结束时重新启用检查,因此您似乎不想这样做。
如果你能在一开始就摆脱可延迟的约束,那就更好了。然后您可以使用自动绑定到事务范围的SET CONSTRAINTS命令。您可以确定您的一致性没有风险。还查找有关可延迟触发器的CREATE TABLE文档。