我如何识别特定的 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 以确保它确实违反了约束。
我们曾经在 (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 以确保它确实违反了约束。