我如何识别特定的 Postgres CONSTRAINT

How can I recognize a specific Postgres CONSTRAINT

我们曾经在 (Java) 域逻辑 中有一个约束,阻止实体 (foo,task_id) 被插入 table entity_a 如果 task_id 已经存在。然后我们抛出一个可以监听的特定异常。

现在我们将该逻辑移动到数据库中它应该在的位置:

ALTER TABLE report ADD CONSTRAINT task_id_unique UNIQUE (task_id);

现在我还是想抛出和以前一样的异常,但是我需要识别数据库层抛出的具体异常情况才能做到这一点。有什么 stable 方法可以让我识别命名约束吗?它最好不依赖于服务器上设置的语言,因为它可能不同,而且我也知道错误消息因一个 Postgres 版本而异。

我们专门使用了非常接近底层 JDBC 级别的 Jdbi,因此获取任何详细信息应该没问题。

您可以将 java.sql.SQLException 转换为 org.postgresql.util.PSQLException. Then you can call the method getServerErrorMessage() to get an org.postgresql.util.ServerErrorMessage. Then call the method getConstraint() 以获得约束的名称。检查 SQLSTATE 以确保它确实违反了约束。