Here's the output of the get database connection config API endpoint if it provides any insight into how Ignition is parsing things:
{
"type": "ignition/database-connection",
"name": "qtspgc1after83",
"description": "",
"enabled": true,
"version": 1,
"collection": "core",
"collections": [
"core"
],
"signature": "564d3ef93ec7c8772088021363a3ec2492481b3a8eb4fbe8622cbb4859967ccd",
"config": {
"driver": "PostgreSQL",
"translator": "POSTGRES",
"includeSchemaInTableName": false,
"connectURL": "jdbc:postgresql://qts-pgc1cf.atlashq.com:5432/testdb",
"username": "ig_atl",
"connectionProps": "\"?ssl=true;sslmode=verify-full;sslrootcert=/etc/step/certs/root_ca.crt;sslcert=/etc/step/certs/ssl-cert.pem;sslkey=/etc/step/certs/ssl-cert.key.pk8\"",
"connectionResetParams": "",
"defaultTransactionLevel": "DEFAULT",
"poolInitSize": 0,
"poolMaxActive": 8,
"poolMaxIdle": 8,
"poolMinIdle": 0,
"poolMaxWait": 5000,
"validationQuery": "SELECT 1",
"testOnBorrow": true,
"testOnReturn": false,
"testWhileIdle": false,
"evictionRate": -1,
"evictionTests": 3,
"evictionTime": 1800000,
"failoverProfile": "",
"failoverMode": "STANDARD",
"slowQueryLogThreshold": 60000,
"validationSleepTime": 10000
},
"data": [
"config.json"
],
"attributes": {
"lastModification": {
"actor": "mquinn",
"timestamp": "2025-07-29T19:27:14Z"
},
"uuid": "c0cc80ea-a98d-436e-87c1-df11eebeede8",
"lastModificationSignature": "72cbcef1201a27eb7a4eb89501fd0ba3f2ac50ccee793d922200a4ff8ca82393",
"enabled": true
},
"metrics": {
"active-connections": {
"name": "databases.connection-qtspgc1after83.active-connections",
"metric": {
"value": 0.0,
"numerator": 0.0,
"denominator": 8.0,
"type": "ratio-gauge",
"description": "Active Connections",
"units": ""
}
},
"active-queries": {
"name": "databases.connection-qtspgc1after83.active-queries",
"metric": {
"value": [],
"type": "gauge",
"description": "Active Queries",
"units": "queries"
}
},
"expensive-queries": {
"name": "databases.connection-qtspgc1after83.expensive-queries",
"metric": {
"value": [],
"type": "gauge",
"description": "Expensive Queries",
"units": "queries"
}
},
"queries": {
"name": "databases.connection-qtspgc1after83.queries",
"metric": {
"oneMinuteRate": 0.0,
"fiveMinuteRate": 0.0,
"fifteenMinuteRate": 0.0,
"count": 0,
"meanRate": 0.0,
"histogram": {
"max": 0.0,
"min": 0.0,
"p50": 0.0,
"p75": 0.0,
"p95": 0.0,
"p98": 0.0,
"p99": 0.0,
"mean": 0.0,
"bucketSize": 0.0,
"buckets": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"type": "histogram",
"stdev": 0.0
},
"type": "timer"
}
},
"rows": {
"name": "databases.connection-qtspgc1after83.rows",
"metric": {
"oneMinuteRate": 0.0,
"fiveMinuteRate": 0.0,
"fifteenMinuteRate": 0.0,
"count": 0,
"meanRate": 0.0,
"type": "meter"
}
},
"throughput": {
"name": "databases.connection-qtspgc1after83.throughput",
"metric": {
"value": -1.0,
"type": "gauge",
"description": "",
"units": "queries/sec"
}
}
},
"healthchecks": {
"status": {
"name": "databases.connection-qtspgc1after83.status",
"result": {
"healthy": false,
"time": 1753817303275,
"message": "Faulted",
"error": {
"message": "Cannot create PoolableConnectionFactory (Could not read SSL key file /etc/step/certs/ssl-cert.key.pk8\".)",
"stacktrace": [
"java.sql.SQLException: Cannot create PoolableConnectionFactory (Could not read SSL key file /etc/step/certs/ssl-cert.key.pk8\".)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:645)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:546)",
"\tat org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:723)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.getConnectionInternal(DatasourceImpl.java:360)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.runTest(DatasourceImpl.java:312)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl$FaultedDatasourceRetryer.lambda$newRetryRunnable$0(DatasourceManagerImpl.java:1109)",
"\tat com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:593)",
"\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"\tat java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)",
"\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"\tat java.base/java.lang.Thread.run(Unknown Source)",
"Caused by: org.postgresql.util.PSQLException: Could not read SSL key file /etc/step/certs/ssl-cert.key.pk8\".",
"\tat org.postgresql.ssl.LazyKeyManager.getPrivateKey(LazyKeyManager.java:268)",
"\tat java.base/sun.security.ssl.AbstractKeyManagerWrapper.getPrivateKey(Unknown Source)",
"\tat java.base/sun.security.ssl.X509Authentication.createClientPossession(Unknown Source)",
"\tat java.base/sun.security.ssl.X509Authentication.createPossession(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.choosePossession(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.onProduceCertificate(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.produce(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLHandshake.produce(Unknown Source)",
"\tat java.base/sun.security.ssl.Finished$T13FinishedConsumer.onConsumeFinished(Unknown Source)",
"\tat java.base/sun.security.ssl.Finished$T13FinishedConsumer.consume(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source)",
"\tat java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)",
"\tat org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:41)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:534)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:149)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213)",
"\tat org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)",
"\tat org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225)",
"\tat org.postgresql.Driver.makeConnection(Driver.java:465)",
"\tat org.postgresql.Driver.connect(Driver.java:264)",
"\tat org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52)",
"\tat org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:481)",
"\tat org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:114)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:641)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:546)",
"\tat org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:723)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.getConnectionInternal(DatasourceImpl.java:360)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.runTest(DatasourceImpl.java:312)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl$FaultedDatasourceRetryer.lambda$newRetryRunnable$0(DatasourceManagerImpl.java:1109)",
"\tat com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:593)",
"\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"\tat java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)",
"\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"\tat java.base/java.lang.Thread.run(Unknown Source)",
"Caused by: java.io.FileNotFoundException: /etc/step/certs/ssl-cert.key.pk8\" (No such file or directory)",
"\tat java.base/java.io.RandomAccessFile.open0(Native Method)",
"\tat java.base/java.io.RandomAccessFile.open(Unknown Source)",
"\tat java.base/java.io.RandomAccessFile.<init>(Unknown Source)",
"\tat java.base/java.io.RandomAccessFile.<init>(Unknown Source)",
"\tat java.base/java.io.RandomAccessFile.<init>(Unknown Source)",
"\tat org.postgresql.ssl.LazyKeyManager.readFileFully(LazyKeyManager.java:182)",
"\tat org.postgresql.ssl.LazyKeyManager.getPrivateKey(LazyKeyManager.java:205)",
"\tat java.base/sun.security.ssl.AbstractKeyManagerWrapper.getPrivateKey(Unknown Source)",
"\tat java.base/sun.security.ssl.X509Authentication.createClientPossession(Unknown Source)",
"\tat java.base/sun.security.ssl.X509Authentication.createPossession(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.choosePossession(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.onProduceCertificate(Unknown Source)",
"\tat java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.produce(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLHandshake.produce(Unknown Source)",
"\tat java.base/sun.security.ssl.Finished$T13FinishedConsumer.onConsumeFinished(Unknown Source)",
"\tat java.base/sun.security.ssl.Finished$T13FinishedConsumer.consume(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source)",
"\tat java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)",
"\tat java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)",
"\tat org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:41)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:534)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:149)",
"\tat org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213)",
"\tat org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)",
"\tat org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225)",
"\tat org.postgresql.Driver.makeConnection(Driver.java:465)",
"\tat org.postgresql.Driver.connect(Driver.java:264)",
"\tat org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52)",
"\tat org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:481)",
"\tat org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:114)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:641)",
"\tat org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:546)",
"\tat org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:723)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.getConnectionInternal(DatasourceImpl.java:360)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.runTest(DatasourceImpl.java:312)",
"\tat com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl$FaultedDatasourceRetryer.lambda$newRetryRunnable$0(DatasourceManagerImpl.java:1109)",
"\tat com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:593)",
"\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"\tat java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)",
"\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"\tat java.base/java.lang.Thread.run(Unknown Source)"
]
}
}
}
}
}