通过jdbc禁用postgresql约束

时间:2012-12-21 11:03:48

标签: java postgresql jdbc constraints

我正在尝试使用JDBC将数据插入到数据库中, 这样做时我必须禁用约束 - check,not-null,foreign-keys。

alter table user_table disable trigger all;

我已经尝试过上面的查询但它不起作用。

我需要一种方法来在程序启动时禁用所有约束,并且当事务完成时我需要重新启用约束。

我正在使用JDBC4和Postgresql 9.0。

1 个答案:

答案 0 :(得分:3)

documentation of PostgreSQL代表ALL部分:

  

禁用或启用属于该表的所有触发器。 (如果任何触发器是内部生成的约束触发器,例如用于实现外键约束或可延迟唯一性和排除约束的触发器,则需要超级用户权限。)

所以我猜测您用来插入数据的用户不是超级用户,因为您在问题中列出了外键检查。

但是:除非你的要求非常特别,否则我认为你的路线错误:

一起禁用检查/触发器是一个非常大的枪,很容易破坏您的数据一致性。而且由于你想在交易结束时重新启用支票,你似乎不想这样做。

如果你能在开始时摆脱可延迟的限制,那就更好了。然后,您可以使用自动绑定到事务范围的SET CONSTRAINTS命令。您可以确定您的一致性没有风险。查看有关可延迟触发器的CREATE TABLE文档。