我正在使用Postgresql
并且JDBC
我试图弄清楚如何创建一个断言。
我目前有两个关系表A(url varchar(30))
和表B(url varchar(30))
,我想编写一个断言,以便如果表 A 中已经存在该元素,则无法插入表 B。如何在 JDBC 中执行此操作?如果无法使用断言,我将如何让类似的事情发生?
编辑:好的,所以我读到不可能使用 postgresql 创建断言;因此,我现在的问题是,我将如何使用 Postgresql 和 JDBC 的约束来做类似的事情?
我正在使用Postgresql
并且JDBC
我试图弄清楚如何创建一个断言。
我目前有两个关系表A(url varchar(30))
和表B(url varchar(30))
,我想编写一个断言,以便如果表 A 中已经存在该元素,则无法插入表 B。如何在 JDBC 中执行此操作?如果无法使用断言,我将如何让类似的事情发生?
编辑:好的,所以我读到不可能使用 postgresql 创建断言;因此,我现在的问题是,我将如何使用 Postgresql 和 JDBC 的约束来做类似的事情?
我不确定没有错字,也许'JDBM'应该是'JDBC'?
对于 MapDB(又名 JDBM4),计划实施地图修改侦听器,它可以处理类似的情况。JDBM3 中没有这样的功能。
现在我建议不要使用断言并在你的代码中检查它。
你想要的实际上是一个负外键约束,它不被直接支持。您可以使用测试条件的 PL/PgSQLBEFORE INSERT OR UPDATE
触发器函数来实现此约束。
请参阅Pg 文档中的PL/PgSQL 触发器过程。
您可能需要使用SERIALIZABLE
隔离模式来处理一个事务插入B
而另一个事务插入A
. 您将需要serializable
9.1/9.2 中改进的隔离支持。