From edbc89c9dd6a62520c71279658844770c7f7ba21 Mon Sep 17 00:00:00 2001 From: Jayaram Sreevalsan Date: Tue, 14 Oct 2025 10:17:17 -0700 Subject: [PATCH] Avoid PG exception handling - unique constraint The design of tsk_host_addresses table accounts for unique constraints on tsk_host_addresses_address_type_address_key Insert attempts to this table does not need to trigger an exception processing flow in the pg db layer. It can be ignored safely. Adding ON CONFLICT DO NOTHING pattern for improved performance. --- .../org/sleuthkit/datamodel/HostAddressManager.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/bindings/java/src/org/sleuthkit/datamodel/HostAddressManager.java b/bindings/java/src/org/sleuthkit/datamodel/HostAddressManager.java index 99ac9843d3..95ac125b29 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/HostAddressManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/HostAddressManager.java @@ -220,7 +220,17 @@ private HostAddress newHostAddress(HostAddress.HostAddressType type, String addr long objId = db.addObject(parentObjId, objTypeId, connection); - String hostAddressInsertSQL = "INSERT INTO tsk_host_addresses(id, address_type, address) VALUES (?, ?, ?)"; // NON-NLS + /* + * A conflict clause is used improve performance related to + * exception handling in the database. + */ + String hostAddressInsertSQL; + if (db.getDatabaseType() == TskData.DbType.POSTGRESQL) { + hostAddressInsertSQL = "INSERT INTO tsk_host_addresses(id, address_type, address) VALUES (?, ?, ?) ON CONFLICT DO NOTHING"; //NON-NLS + } else { + hostAddressInsertSQL = "INSERT OR IGNORE INTO tsk_host_addresses(id, address_type, address) VALUES (?, ?, ?)"; //NON-NLS + } + PreparedStatement preparedStatement = connection.getPreparedStatement(hostAddressInsertSQL, Statement.RETURN_GENERATED_KEYS); preparedStatement.clearParameters();