Alarm Journal error, table alarm_events already exists

Hi,

I have an error with Alarm Journal. When I configure the journal, it creates the tables for the first time and is working fine, but once I add an index to the alarm_events table, the next message is shown in the log.

E [a.J.DatabaseJournal           ] [12:56:25.723]: Alarm journal initialization failed. Will try again in 60 seconds. journal=alrj_xxxxxx
INFO   | jvm 1    | 2025/06/28 12:56:25 | java.lang.Exception: Error running query: CREATE TABLE alarm_events ("id" SERIAL NOT NULL,"eventid" varchar(255),"source" varchar(255),"displaypath" varchar(255),"priority" int,"eventtype" int,"eventflags" int,"eventtime" timestamp,PRIMARY KEY ("id","eventtime"))
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.db.schema.DBTableSchema.executeCommandSet(DBTableSchema.java:140)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.db.schema.DBTableSchema.createTable(DBTableSchema.java:109)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.db.schema.DBTableSchema.verifyAndUpdate(DBTableSchema.java:91)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.alarming.journal.JournalTables$EventTable.verifyTable(JournalTables.java:59)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.alarming.journal.DatabaseAlarmJournal.verifyTables(DatabaseAlarmJournal.java:175)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.alarming.journal.DatabaseAlarmJournal.tryInit(DatabaseAlarmJournal.java:155)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at java.base/java.lang.Thread.run(Unknown Source)
INFO   | jvm 1    | 2025/06/28 12:56:25 | Caused by: org.postgresql.util.PSQLException: ERROR: la relación «alarm_events» ya existe
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2736)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2423)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:374)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:518)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:435)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:357)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:342)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:318)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.postgresql.jdbc.PgStatement.executeUpdate(PgStatement.java:291)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.apache.commons.dbcp2.DelegatingStatement.executeUpdate(DelegatingStatement.java:341)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at org.apache.commons.dbcp2.DelegatingStatement.executeUpdate(DelegatingStatement.java:341)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.datasource.DelegatingStatement.executeUpdate(DelegatingStatement.java:80)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.datasource.SRConnectionWrapper$SRStatement.executeUpdate(SRConnectionWrapper.java:867)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	at com.inductiveautomation.ignition.gateway.db.schema.DBTableSchema.executeCommandSet(DBTableSchema.java:138)
INFO   | jvm 1    | 2025/06/28 12:56:25 | 	... 12 common frames omitted

The alarms are inserted inside the table but, every 60 seconds I get a error message inside the log.

Can I disable the table check or the message ?
I'm using Ignition 8.1.48

Thanks

Sounds like a bug you should report (open a support ticket).

Hi @pturmel,

I asked the support team and after some tests, they suggested me to change the database driver configuration.
In the database drivers "Config->Database->Drivers->Translators" they changed the create table and create index translator.

For Create table:
image
For Create Index:
image

They suggested to use "IF NOT EXISTS" to prevent if the table or index exists, the internal query sequence not fail.
In the logs, we see that after this change the create table process finished correct, but we need to activate trace level on "TableVerifier" logger to detect the problem.

NFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.030]: (table=alarm_events) Refreshing table state for 'alarm_events', with required columns: [id, eventid, source, displaypath, priority, eventtype, eventflags, eventtime] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.030]: (table=alarm_events) Database meta retrieved - Lower case: true Lower Quoted: false Mixed: false Mixed quoted: false Upper case: false Upper quoted: false Catalog Separator: . 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.030]: (table=alarm_events) Querying existing tables: Schema='', Table='alarm_events' 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.034]: (table=alarm_events) Table not found. 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.034]: (table=alarm_events) Creating table... 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.034]: (table=alarm_events) Executing modification queries: [CREATE TABLE IF NOT EXISTS alarm_events ("id" SERIAL NOT NULL,"eventid" varchar(255),"source" varchar(255),"displaypath" varchar(255),"priority" int,"eventtype" int,"eventflags" int,"eventtime" timestamp,PRIMARY KEY ("id","eventtime"))] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.060]: (table=alarm_events) Refreshing table state for 'alarm_events', with required columns: [id, eventid, source, displaypath, priority, eventtype, eventflags, eventtime] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.060]: (table=alarm_events) Database meta retrieved - Lower case: true Lower Quoted: false Mixed: false Mixed quoted: false Upper case: false Upper quoted: false Catalog Separator: . 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.060]: (table=alarm_events) Querying existing tables: Schema='', Table='alarm_events' 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.061]: (table=alarm_events) Table not found. 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.061]: (table=alarm_event_data) Refreshing table state for 'alarm_event_data', with required columns: [id, propname, dtype, intvalue, floatvalue, strvalue] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.061]: (table=alarm_event_data) Database meta retrieved - Lower case: true Lower Quoted: false Mixed: false Mixed quoted: false Upper case: false Upper quoted: false Catalog Separator: . 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.061]: (table=alarm_event_data) Querying existing tables: Schema='', Table='alarm_event_data' 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.063]: (table=alarm_event_data) Table not found. 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.063]: (table=alarm_event_data) Creating table... 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.063]: (table=alarm_event_data) Executing modification queries: [CREATE TABLE IF NOT EXISTS alarm_event_data ("id" int,"propname" varchar(255),"dtype" int,"intvalue" bigint,"floatvalue" double precision,"strvalue" text)] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.063]: (table=alarm_event_data) Executing modification queries: [CREATE INDEX IF NOT EXISTS "alarm_event_dataidndx" ON alarm_event_data("id")] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.064]: (table=alarm_event_data) Refreshing table state for 'alarm_event_data', with required columns: [id, propname, dtype, intvalue, floatvalue, strvalue] 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.064]: (table=alarm_event_data) Database meta retrieved - Lower case: true Lower Quoted: false Mixed: false Mixed quoted: false Upper case: false Upper quoted: false Catalog Separator: . 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.064]: (table=alarm_event_data) Querying existing tables: Schema='', Table='alarm_event_data' 
INFO   | jvm 1    | 2025/07/02 17:28:58 | D [g.D.TableVerifier             ] [17:28:58.065]: (table=alarm_event_data) Table not found. 
INFO   | jvm 1    | 2025/07/02 17:28:58 | I [a.J.DatabaseJournal           ] [17:28:58.065]: Alarm journal initialized successfully against datasource 'db_xxxxxx' journal=alrj_xxxxx
INF

The las line shows:
Alarm journal initialized successfully against datasource 'db_xxxxxx' journal=alrj_xxxxx

This solved the problem.

Thanks to the support team.. :clap: