【问题标题】:disable postgresql constraints by jdbc通过 jdbc 禁用 postgresql 约束
【发布时间】:2012-12-21 11:03:48
【问题描述】:

我正在尝试使用 JDBC 将数据插入数据库, 这样做时,我必须禁用约束 - 检查、非空、外键。

alter table user_table disable trigger all;

我试过上面的查询它不起作用。

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

我正在使用 JDBC4 和 Postgresql 9.0。

【问题讨论】:

  • 你是如何执行alter table语句(代码)的?
  • 不起作用”既不是有效的 PostgreSQL 错误消息,也不是有效的 Java 异常

标签: java postgresql jdbc constraints


【解决方案1】:

documentation of PostgreSQL 表示 ALL 部分:

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

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

但是:除非您的要求非常特别,否则我认为您走错了路:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2021-12-03
    • 2011-04-10
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多