Connectors
AI-DBA supports five database engines, each implementing the DatabaseConnector interface with seven methods.
Interface
All connectors implement:
| Method | Description |
|---|---|
listDatabases |
List databases/schemas |
listTables |
List tables (optional database/schema filter) |
describeTable |
Column metadata (name, type, nullable, PK, auto-increment) |
listIndexes |
Index info (name, columns, unique, primary, type) |
listProcesses |
Active connections/sessions |
query |
Read-only SQL/JSON query (rejects writes) |
getBlockingChains |
Blocking/lock detection |
MySQL
Driver: mysql2/promise
URL: mysql://user:password@host:port/database
- Uses
INFORMATION_SCHEMAfor metadata - Blocking chains via
performance_schema.data_lock_waits(MySQL 8.0+) query()allowsSELECT,SHOW,WITH,EXPLAIN,DESCRIBE
PostgreSQL
Driver: pg
URL: postgresql://user:password@host:port/database
- Uses
information_schemaandpg_catalog - Blocking chains via
pg_blocking_pids() query()allowsSELECT,WITH,EXPLAIN
SQL Server
Driver: tedious (raw driver, promise-based wrapper)
URL: sqlserver://user:password@host:port/database
- Uses
INFORMATION_SCHEMAandsys.dm_exec_*DMVs - Blocking chains via
sys.dm_os_waiting_tasks+sys.dm_exec_requests listProcessesfilters to user processes only (session_id >= 50)- Known limitation: No connection pooling (new TCP connection per call)
- tedious returns JS booleans for BIT columns — connector uses
Boolean()cast
Oracle
Driver: oracledb (thin mode — no Oracle Instant Client needed)
URL: oracle://user:password@host:port/service
- Uses
user_*andall_*views (no SELECT ANY DICTIONARY needed for metadata) listProcessesandgetBlockingChainsusev$session— requires SELECT ANY DICTIONARY- Graceful fallback: Returns empty arrays if
v$access denied (ORA-00942/ORA-01031) - Oracle uppercases identifiers by default
- Bind variable names use
:tbl(not:table— reserved in oracledb)
SELECT ANY DICTIONARY
To see active processes and blocking chains, grant:
MongoDB
Driver: mongodb (official Node.js driver, ESM-native)
URL: mongodb://user:password@host:port/database?authSource=admin
listTableslists collectionsdescribeTableinfers schema by sampling up to 100 documentslistProcessesusesdb.currentOp()query()accepts JSON command documents (not SQL):find,aggregate,count,distinct,pinggetBlockingChainsreports long-running operations (MongoDB has no traditional row locks)
Query API difference
MongoDB query() takes JSON, not SQL:
Capabilities Matrix
| Feature | MySQL | PostgreSQL | SQL Server | Oracle | MongoDB |
|---|---|---|---|---|---|
| listDatabases | Schemas | Databases | Databases | Users | Databases |
| listTables | Tables | Tables | Tables | Tables | Collections |
| describeTable | Columns | Columns | Columns | Columns | Inferred fields |
| listIndexes | Indexes | Indexes | Indexes | Indexes | Indexes |
| listProcesses | processlist | pg_stat_activity | dm_exec_sessions | v$session* | currentOp |
| query | SQL | SQL | SQL | SQL | JSON commands |
| getBlockingChains | Lock waits | pg_blocking_pids | dm_os_waiting_tasks | v$session* | Long ops |
| Connection pooling | Yes (mysql2) | Yes (pg.Pool) | No (per-call) | Yes (oracledb pool) | Yes (MongoClient) |
*Requires SELECT ANY DICTIONARY privilege.