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