@tejasanik/postgres-mcp-server 1.7.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +427 -9
- package/dist/__tests__/db-manager.test.js +44 -0
- package/dist/__tests__/db-manager.test.js.map +1 -1
- package/dist/__tests__/sql-tools.test.js +1459 -0
- package/dist/__tests__/sql-tools.test.js.map +1 -1
- package/dist/db-manager.d.ts +31 -1
- package/dist/db-manager.d.ts.map +1 -1
- package/dist/db-manager.js +111 -2
- package/dist/db-manager.js.map +1 -1
- package/dist/index.js +216 -11
- package/dist/index.js.map +1 -1
- package/dist/tools/server-tools.d.ts +2 -0
- package/dist/tools/server-tools.d.ts.map +1 -1
- package/dist/tools/server-tools.js +2 -1
- package/dist/tools/server-tools.js.map +1 -1
- package/dist/tools/sql-tools.d.ts +143 -2
- package/dist/tools/sql-tools.d.ts.map +1 -1
- package/dist/tools/sql-tools.js +1267 -39
- package/dist/tools/sql-tools.js.map +1 -1
- package/dist/types.d.ts +291 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +60 -60
- package/dist/utils/masking.d.ts +0 -18
- package/dist/utils/masking.d.ts.map +0 -1
- package/dist/utils/masking.js +0 -68
- package/dist/utils/masking.js.map +0 -1
package/README.md
CHANGED
|
@@ -35,6 +35,7 @@ export PG_DATABASE_1="myapp_dev"
|
|
|
35
35
|
export PG_SCHEMA_1="public"
|
|
36
36
|
export PG_SSL_1="true"
|
|
37
37
|
export PG_DEFAULT_1="true"
|
|
38
|
+
export PG_CONTEXT_1="Development server. Feel free to run any queries. Test data only."
|
|
38
39
|
|
|
39
40
|
# Server 2 - Staging
|
|
40
41
|
export PG_NAME_2="staging"
|
|
@@ -44,6 +45,7 @@ export PG_USERNAME_2="staging_user"
|
|
|
44
45
|
export PG_PASSWORD_2="staging_password"
|
|
45
46
|
export PG_DATABASE_2="myapp_staging"
|
|
46
47
|
export PG_SSL_2="require"
|
|
48
|
+
export PG_CONTEXT_2="Staging server with production-like data. Avoid bulk deletes. Use LIMIT on large tables."
|
|
47
49
|
|
|
48
50
|
# Server 3 - Production
|
|
49
51
|
export PG_NAME_3="production"
|
|
@@ -54,6 +56,7 @@ export PG_PASSWORD_3="prod_password"
|
|
|
54
56
|
export PG_DATABASE_3="myapp_prod"
|
|
55
57
|
export PG_SCHEMA_3="app"
|
|
56
58
|
export PG_SSL_3="true"
|
|
59
|
+
export PG_CONTEXT_3="PRODUCTION - Read-only queries only. Always use LIMIT. Avoid full table scans. Peak hours: 9am-5pm EST."
|
|
57
60
|
```
|
|
58
61
|
|
|
59
62
|
**Environment Variable Reference:**
|
|
@@ -69,6 +72,32 @@ export PG_SSL_3="true"
|
|
|
69
72
|
| `PG_SCHEMA_{n}` | No | Default schema (default: "public") |
|
|
70
73
|
| `PG_SSL_{n}` | No | SSL mode: `true`, `false`, `require`, `prefer`, `allow`, `disable` |
|
|
71
74
|
| `PG_DEFAULT_{n}` | No | Set to `true` to make this the default server |
|
|
75
|
+
| `PG_CONTEXT_{n}` | No | AI context/guidance for this server (see below) |
|
|
76
|
+
|
|
77
|
+
#### AI Context for Servers
|
|
78
|
+
|
|
79
|
+
The `PG_CONTEXT_{n}` variable allows you to provide guidance to AI agents about how to interact with each server. This context is returned in `list_servers` and `get_current_connection` responses, helping AI agents make better decisions.
|
|
80
|
+
|
|
81
|
+
**Example context values:**
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Development - full access
|
|
85
|
+
export PG_CONTEXT_DEV="Development environment. Safe to run any queries. Contains test data only."
|
|
86
|
+
|
|
87
|
+
# Staging - be careful
|
|
88
|
+
export PG_CONTEXT_STAGING="Staging with production-like data. Use LIMIT clauses. Avoid bulk operations."
|
|
89
|
+
|
|
90
|
+
# Production - strict guidelines
|
|
91
|
+
export PG_CONTEXT_PROD="PRODUCTION DATABASE - CRITICAL GUIDELINES:
|
|
92
|
+
- Read-only queries strongly preferred
|
|
93
|
+
- Always use LIMIT (max 1000 rows)
|
|
94
|
+
- Avoid full table scans on large tables (users, orders, events)
|
|
95
|
+
- Peak hours: 9am-5pm EST - minimize heavy queries
|
|
96
|
+
- Main schemas: 'app' (application data), 'analytics' (reporting)
|
|
97
|
+
- Contact DBA before any DDL operations"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The context appears in the `list_servers` response for each server and in `get_current_connection` for the active server, allowing AI agents to adjust their behavior accordingly.
|
|
72
101
|
|
|
73
102
|
**Note:** The suffix `{n}` can be any string (e.g., `_1`, `_2`, `_DEV`, `_PROD`). The system detects servers by looking for `PG_NAME_*` variables.
|
|
74
103
|
|
|
@@ -86,15 +115,17 @@ export POSTGRES_SERVERS='{
|
|
|
86
115
|
"defaultDatabase": "myapp_dev",
|
|
87
116
|
"defaultSchema": "public",
|
|
88
117
|
"isDefault": true,
|
|
89
|
-
"ssl": true
|
|
118
|
+
"ssl": true,
|
|
119
|
+
"context": "Development server. Safe for any queries."
|
|
90
120
|
},
|
|
91
|
-
"
|
|
92
|
-
"host": "
|
|
121
|
+
"production": {
|
|
122
|
+
"host": "prod.example.com",
|
|
93
123
|
"port": "5432",
|
|
94
124
|
"username": "your_username",
|
|
95
125
|
"password": "your_password",
|
|
96
|
-
"defaultDatabase": "
|
|
97
|
-
"ssl": "require"
|
|
126
|
+
"defaultDatabase": "myapp_prod",
|
|
127
|
+
"ssl": "require",
|
|
128
|
+
"context": "PRODUCTION - Read-only queries only. Always use LIMIT."
|
|
98
129
|
}
|
|
99
130
|
}'
|
|
100
131
|
```
|
|
@@ -235,7 +266,7 @@ Switch to a different PostgreSQL server and optionally a specific database and s
|
|
|
235
266
|
|
|
236
267
|
#### `get_current_connection`
|
|
237
268
|
|
|
238
|
-
Returns details about the current database connection including server, database, schema, and
|
|
269
|
+
Returns details about the current database connection including server, database, schema, access mode, user, and AI context.
|
|
239
270
|
|
|
240
271
|
**Parameters:** None
|
|
241
272
|
|
|
@@ -246,6 +277,8 @@ Returns details about the current database connection including server, database
|
|
|
246
277
|
- `database`: Current database name
|
|
247
278
|
- `schema`: Current schema name
|
|
248
279
|
- `accessMode`: "readonly" or "full"
|
|
280
|
+
- `user`: Database username for the current connection
|
|
281
|
+
- `context`: (If configured) AI context/guidance for the current server
|
|
249
282
|
|
|
250
283
|
### Schema & Object Exploration
|
|
251
284
|
|
|
@@ -285,11 +318,14 @@ Executes SQL statements on the database. Supports pagination and parameterized q
|
|
|
285
318
|
|
|
286
319
|
**Parameters:**
|
|
287
320
|
|
|
288
|
-
- `sql` (required): SQL statement to execute. Use `$1`, `$2`, etc. for parameterized queries.
|
|
289
|
-
- `params` (optional): Array of parameters for parameterized queries (e.g., `[123, "value"]`). Prevents SQL injection.
|
|
321
|
+
- `sql` (required): SQL statement(s) to execute. Use `$1`, `$2`, etc. for parameterized queries.
|
|
322
|
+
- `params` (optional): Array of parameters for parameterized queries (e.g., `[123, "value"]`). Prevents SQL injection. Not supported with `allowMultipleStatements`.
|
|
290
323
|
- `maxRows` (optional): Maximum rows to return (default: 1000, max: 100000). Use with `offset` for pagination.
|
|
291
324
|
- `offset` (optional): Number of rows to skip for pagination (default: 0).
|
|
292
325
|
- `allowLargeScript` (optional): Set to true to bypass the 100KB SQL length limit for deployment scripts.
|
|
326
|
+
- `includeSchemaHint` (optional): Include schema information (columns, primary keys, foreign keys) for tables referenced in the query.
|
|
327
|
+
- `allowMultipleStatements` (optional): Allow multiple SQL statements separated by semicolons. Returns results for each statement with line numbers.
|
|
328
|
+
- `transactionId` (optional): Execute within an active transaction. Get this from `begin_transaction`.
|
|
293
329
|
|
|
294
330
|
**Returns:**
|
|
295
331
|
|
|
@@ -300,18 +336,23 @@ Executes SQL statements on the database. Supports pagination and parameterized q
|
|
|
300
336
|
- `offset`: Current offset
|
|
301
337
|
- `hasMore`: Whether more rows are available
|
|
302
338
|
- `outputFile`: (Only if output is too large) Path to temp file with full results
|
|
339
|
+
- `schemaHint`: (When includeSchemaHint=true) Schema information for referenced tables:
|
|
340
|
+
- `tables`: Array of table schemas with columns, primary keys, foreign keys, and row count estimates
|
|
303
341
|
|
|
304
342
|
**Note:** Large outputs are automatically written to a temp file, and the file path is returned. This prevents token wastage when dealing with large result sets.
|
|
305
343
|
|
|
306
344
|
#### `execute_sql_file`
|
|
307
345
|
|
|
308
|
-
Executes a `.sql` file from the filesystem. Useful for running migration scripts, schema changes, or data imports.
|
|
346
|
+
Executes a `.sql` file from the filesystem. Useful for running migration scripts, schema changes, or data imports. Supports SQL files from various tools like Liquibase, Flyway, and SQL Server migrations.
|
|
309
347
|
|
|
310
348
|
**Parameters:**
|
|
311
349
|
|
|
312
350
|
- `filePath` (required): Absolute or relative path to the `.sql` file to execute
|
|
313
351
|
- `useTransaction` (optional): Wrap execution in a transaction (default: true). If any statement fails, all changes are rolled back.
|
|
314
352
|
- `stopOnError` (optional): Stop execution on first error (default: true). If false, continues with remaining statements and collects all errors.
|
|
353
|
+
- `stripPatterns` (optional): Array of patterns to remove from SQL before execution. Useful for stripping tool-specific delimiters (e.g., Liquibase's `/`, SQL Server's `GO`).
|
|
354
|
+
- `stripAsRegex` (optional): If true, treat `stripPatterns` as regular expressions; if false, as literal strings (default: false).
|
|
355
|
+
- `validateOnly` (optional): If true, parse and validate the file without executing (default: false). Returns a preview of all statements.
|
|
315
356
|
|
|
316
357
|
**Returns:**
|
|
317
358
|
|
|
@@ -328,9 +369,330 @@ Executes a `.sql` file from the filesystem. Useful for running migration scripts
|
|
|
328
369
|
- `sql`: The failing SQL (truncated to 200 chars)
|
|
329
370
|
- `error`: Error message
|
|
330
371
|
- `rollback`: Whether a rollback was performed
|
|
372
|
+
- `validateOnly`: (When validateOnly=true) Set to true
|
|
373
|
+
- `preview`: (When validateOnly=true) Array of statement previews:
|
|
374
|
+
- `index`: Statement index (1-based)
|
|
375
|
+
- `lineNumber`: Line number in the file
|
|
376
|
+
- `sql`: The SQL statement (truncated to 200 chars)
|
|
377
|
+
- `type`: Detected statement type (SELECT, INSERT, UPDATE, DELETE, CREATE, etc.)
|
|
331
378
|
|
|
332
379
|
**Limits:** Max file size: 50MB. Supports PostgreSQL-specific syntax including dollar-quoted strings and block comments.
|
|
333
380
|
|
|
381
|
+
**Examples:**
|
|
382
|
+
|
|
383
|
+
```
|
|
384
|
+
# Preview a file without executing
|
|
385
|
+
execute_sql_file({ filePath: "/path/to/migration.sql", validateOnly: true })
|
|
386
|
+
|
|
387
|
+
# Strip Liquibase delimiters (literal "/" on its own line)
|
|
388
|
+
execute_sql_file({ filePath: "/path/to/liquibase.sql", stripPatterns: ["/"] })
|
|
389
|
+
|
|
390
|
+
# Strip SQL Server GO statements (regex pattern)
|
|
391
|
+
execute_sql_file({
|
|
392
|
+
filePath: "/path/to/sqlserver.sql",
|
|
393
|
+
stripPatterns: ["^\\s*GO\\s*$"],
|
|
394
|
+
stripAsRegex: true
|
|
395
|
+
})
|
|
396
|
+
|
|
397
|
+
# Strip multiple patterns
|
|
398
|
+
execute_sql_file({
|
|
399
|
+
filePath: "/path/to/migration.sql",
|
|
400
|
+
stripPatterns: ["/", "GO", "\\"]
|
|
401
|
+
})
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
#### `preview_sql_file`
|
|
405
|
+
|
|
406
|
+
Preview a SQL file without executing it. Similar to `mutation_preview` but for SQL files. Shows statement counts by type and warnings for potentially dangerous operations. Use this before `execute_sql_file` to understand what a migration will do.
|
|
407
|
+
|
|
408
|
+
**Parameters:**
|
|
409
|
+
|
|
410
|
+
- `filePath` (required): Absolute or relative path to the `.sql` file to preview
|
|
411
|
+
- `stripPatterns` (optional): Patterns to strip from SQL before parsing (same as execute_sql_file)
|
|
412
|
+
- `stripAsRegex` (optional): If true, treat patterns as regex (default: false)
|
|
413
|
+
- `maxStatements` (optional): Maximum statements to show in preview (default: 20, max: 100)
|
|
414
|
+
|
|
415
|
+
**Returns:**
|
|
416
|
+
|
|
417
|
+
- `filePath`: Resolved file path
|
|
418
|
+
- `fileSize`: File size in bytes
|
|
419
|
+
- `fileSizeFormatted`: Human-readable file size (e.g., "15.2 KB")
|
|
420
|
+
- `totalStatements`: Total executable statements in the file
|
|
421
|
+
- `statementsByType`: Breakdown by statement type (e.g., `{ "CREATE": 5, "INSERT": 10, "ALTER": 2 }`)
|
|
422
|
+
- `statements`: Array of statement previews (up to maxStatements):
|
|
423
|
+
- `index`: Statement number (1-based)
|
|
424
|
+
- `lineNumber`: Line number in file
|
|
425
|
+
- `sql`: Statement SQL (truncated to 300 chars)
|
|
426
|
+
- `type`: Statement type (SELECT, INSERT, CREATE, etc.)
|
|
427
|
+
- `warnings`: Array of warnings for dangerous operations:
|
|
428
|
+
- DROP statements
|
|
429
|
+
- TRUNCATE statements
|
|
430
|
+
- DELETE/UPDATE without WHERE clause
|
|
431
|
+
- `summary`: Human-readable summary (e.g., "File contains 17 statements: 10 INSERT, 5 CREATE, 2 ALTER")
|
|
432
|
+
|
|
433
|
+
**Example:**
|
|
434
|
+
|
|
435
|
+
```
|
|
436
|
+
preview_sql_file({ filePath: "/path/to/migration.sql" })
|
|
437
|
+
// Returns:
|
|
438
|
+
// {
|
|
439
|
+
// "filePath": "/path/to/migration.sql",
|
|
440
|
+
// "fileSize": 15234,
|
|
441
|
+
// "fileSizeFormatted": "14.9 KB",
|
|
442
|
+
// "totalStatements": 17,
|
|
443
|
+
// "statementsByType": { "CREATE": 5, "INSERT": 10, "ALTER": 2 },
|
|
444
|
+
// "statements": [...],
|
|
445
|
+
// "warnings": ["Statement 15 (line 142): DROP statement detected - will permanently remove database object"],
|
|
446
|
+
// "summary": "File contains 17 statements: 10 INSERT, 5 CREATE, 2 ALTER"
|
|
447
|
+
// }
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
#### `mutation_preview`
|
|
451
|
+
|
|
452
|
+
Preview the effect of INSERT, UPDATE, or DELETE statements without executing them. Shows estimated rows affected and a sample of rows that would be modified. Essential for verifying destructive queries before running them.
|
|
453
|
+
|
|
454
|
+
**Parameters:**
|
|
455
|
+
|
|
456
|
+
- `sql` (required): The INSERT, UPDATE, or DELETE statement to preview
|
|
457
|
+
- `sampleSize` (optional): Number of sample rows to show (default: 5, max: 20)
|
|
458
|
+
|
|
459
|
+
**Returns:**
|
|
460
|
+
|
|
461
|
+
- `mutationType`: Type of mutation (INSERT, UPDATE, DELETE)
|
|
462
|
+
- `estimatedRowsAffected`: Estimated number of rows that would be affected
|
|
463
|
+
- `sampleAffectedRows`: Sample of rows that would be modified (for UPDATE/DELETE)
|
|
464
|
+
- `targetTable`: The table being modified
|
|
465
|
+
- `whereClause`: The WHERE clause from the query (if present)
|
|
466
|
+
- `warning`: Warning message if no WHERE clause (all rows affected) or for INSERT previews
|
|
467
|
+
|
|
468
|
+
**Example:**
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
mutation_preview({ sql: "DELETE FROM orders WHERE status = 'cancelled'" })
|
|
472
|
+
// Returns: { mutationType: "DELETE", estimatedRowsAffected: 150, sampleAffectedRows: [...5 rows...] }
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
#### `mutation_dry_run`
|
|
476
|
+
|
|
477
|
+
**Transaction-based dry-run for mutations.** Actually executes the INSERT/UPDATE/DELETE within a transaction, captures **REAL** results, then ROLLBACK so nothing persists. More accurate than `mutation_preview` because it catches actual constraint violations, trigger effects, and exact row counts.
|
|
478
|
+
|
|
479
|
+
**Non-Rollbackable Operations:** Statements containing explicit `NEXTVAL()` or `SETVAL()` are **skipped** to prevent sequence values from being permanently consumed. For skipped statements, an `EXPLAIN` query plan is provided instead.
|
|
480
|
+
|
|
481
|
+
**Parameters:**
|
|
482
|
+
|
|
483
|
+
- `sql` (required): The INSERT, UPDATE, or DELETE statement to dry-run
|
|
484
|
+
- `sampleSize` (optional): Number of sample rows to return (default: 10, max: 20)
|
|
485
|
+
|
|
486
|
+
**Returns:**
|
|
487
|
+
|
|
488
|
+
- `mutationType`: Type of mutation (INSERT, UPDATE, DELETE)
|
|
489
|
+
- `success`: Whether the dry-run executed successfully
|
|
490
|
+
- `skipped`: If `true`, statement was skipped (contains non-rollbackable operation)
|
|
491
|
+
- `skipReason`: Why the statement was skipped
|
|
492
|
+
- `rowsAffected`: **Actual** number of rows that would be affected
|
|
493
|
+
- `beforeRows`: Sample of rows before the change (for UPDATE/DELETE)
|
|
494
|
+
- `affectedRows`: Sample of rows after the change (for INSERT/UPDATE) or deleted rows
|
|
495
|
+
- `targetTable`: The table being modified
|
|
496
|
+
- `whereClause`: The WHERE clause (if present)
|
|
497
|
+
- `executionTimeMs`: Execution time in milliseconds
|
|
498
|
+
- `error`: Detailed PostgreSQL error information if failed:
|
|
499
|
+
- `message`: Error message
|
|
500
|
+
- `code`: PostgreSQL error code (e.g., '23505' for unique violation)
|
|
501
|
+
- `detail`: Detailed error description
|
|
502
|
+
- `hint`: Hint for fixing the error
|
|
503
|
+
- `constraint`: Constraint name that caused the error
|
|
504
|
+
- `table`, `column`, `schema`: Related database objects
|
|
505
|
+
- `nonRollbackableWarnings`: Warnings about side effects:
|
|
506
|
+
- `operation`: Type of operation (SEQUENCE, VACUUM, etc.)
|
|
507
|
+
- `message`: Warning message
|
|
508
|
+
- `mustSkip`: If `true`, operation was skipped; if `false`, just a warning
|
|
509
|
+
- `warnings`: General warnings (e.g., no WHERE clause)
|
|
510
|
+
- `explainPlan`: Query plan from EXPLAIN (for skipped DML statements with NEXTVAL/SETVAL)
|
|
511
|
+
|
|
512
|
+
**Example:**
|
|
513
|
+
|
|
514
|
+
```
|
|
515
|
+
mutation_dry_run({ sql: "INSERT INTO users (email) VALUES ('test@test.com')" })
|
|
516
|
+
// On success: { success: true, mutationType: "INSERT", rowsAffected: 1, affectedRows: [{id: 5, email: "test@test.com"}] }
|
|
517
|
+
// On failure: { success: false, error: { code: "23505", constraint: "users_email_key", detail: "Key already exists" } }
|
|
518
|
+
|
|
519
|
+
// With explicit NEXTVAL (skipped):
|
|
520
|
+
mutation_dry_run({ sql: "INSERT INTO users (id) VALUES (nextval('users_id_seq'))" })
|
|
521
|
+
// Returns: { success: true, skipped: true, skipReason: "NEXTVAL increments sequence...", explainPlan: [...] }
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
#### `dry_run_sql_file`
|
|
525
|
+
|
|
526
|
+
**Transaction-based dry-run for SQL files.** Actually executes ALL statements within a transaction, captures **REAL** results for each statement (row counts, errors with line numbers, constraint violations), then ROLLBACK so nothing persists. Perfect for testing migrations before deploying.
|
|
527
|
+
|
|
528
|
+
**Non-Rollbackable Operations:** The following operations are automatically **skipped** (not executed):
|
|
529
|
+
- **VACUUM, CLUSTER, REINDEX CONCURRENTLY**: Cannot run inside a transaction
|
|
530
|
+
- **CREATE INDEX CONCURRENTLY**: Cannot run inside a transaction
|
|
531
|
+
- **CREATE/DROP DATABASE**: Cannot run inside a transaction
|
|
532
|
+
- **NEXTVAL(), SETVAL()**: Would permanently consume sequence values
|
|
533
|
+
|
|
534
|
+
For skipped DML statements (INSERT/UPDATE/DELETE/SELECT with NEXTVAL/SETVAL), an `EXPLAIN` query plan is provided so you can still see what the query would do.
|
|
535
|
+
|
|
536
|
+
**Parameters:**
|
|
537
|
+
|
|
538
|
+
- `filePath` (required): Absolute or relative path to the `.sql` file
|
|
539
|
+
- `stripPatterns` (optional): Patterns to strip from SQL before execution (e.g., `["/"]` for Liquibase)
|
|
540
|
+
- `stripAsRegex` (optional): If true, treat patterns as regex (default: false)
|
|
541
|
+
- `maxStatements` (optional): Maximum statements to include in results (default: 50, max: 200)
|
|
542
|
+
- `stopOnError` (optional): Stop on first error (default: false - continues to show ALL errors)
|
|
543
|
+
|
|
544
|
+
**Returns:**
|
|
545
|
+
|
|
546
|
+
- `success`: Whether all statements executed successfully (skipped statements don't count as failures)
|
|
547
|
+
- `filePath`: Resolved file path
|
|
548
|
+
- `fileSize`: File size in bytes
|
|
549
|
+
- `fileSizeFormatted`: Human-readable file size
|
|
550
|
+
- `totalStatements`: Total statements in file
|
|
551
|
+
- `successCount`: Number of successful statements
|
|
552
|
+
- `failureCount`: Number of failed statements
|
|
553
|
+
- `skippedCount`: Number of skipped statements (non-rollbackable operations)
|
|
554
|
+
- `totalRowsAffected`: Total rows affected across all statements
|
|
555
|
+
- `statementsByType`: Breakdown by statement type (e.g., `{"CREATE": 5, "INSERT": 10}`)
|
|
556
|
+
- `executionTimeMs`: Total execution time
|
|
557
|
+
- `statementResults`: Array of results for each statement:
|
|
558
|
+
- `index`: Statement number (1-based)
|
|
559
|
+
- `lineNumber`: Line number in file
|
|
560
|
+
- `sql`: The SQL statement (truncated)
|
|
561
|
+
- `type`: Statement type (SELECT, INSERT, CREATE, etc.)
|
|
562
|
+
- `success`: Whether statement succeeded
|
|
563
|
+
- `skipped`: If `true`, statement was skipped (non-rollbackable operation)
|
|
564
|
+
- `skipReason`: Why the statement was skipped
|
|
565
|
+
- `rowCount`: Rows affected/returned
|
|
566
|
+
- `rows`: Sample rows (for SELECT or RETURNING)
|
|
567
|
+
- `executionTimeMs`: Statement execution time
|
|
568
|
+
- `error`: Detailed PostgreSQL error if failed (same fields as `mutation_dry_run`)
|
|
569
|
+
- `warnings`: Warnings for this statement
|
|
570
|
+
- `explainPlan`: Query plan from EXPLAIN (for skipped DML statements)
|
|
571
|
+
- `nonRollbackableWarnings`: Warnings about operations that can't be fully rolled back:
|
|
572
|
+
- `operation`: Type (SEQUENCE, VACUUM, CLUSTER, etc.)
|
|
573
|
+
- `message`: Warning message
|
|
574
|
+
- `mustSkip`: If `true`, operation was skipped; if `false`, just a warning
|
|
575
|
+
- `statementIndex`, `lineNumber`: Location in file
|
|
576
|
+
- `summary`: Human-readable summary
|
|
577
|
+
- `rolledBack`: Always `true` - confirms changes were rolled back
|
|
578
|
+
|
|
579
|
+
**Example:**
|
|
580
|
+
|
|
581
|
+
```
|
|
582
|
+
dry_run_sql_file({ filePath: "/path/to/migration.sql", stripPatterns: ["/"] })
|
|
583
|
+
// Returns:
|
|
584
|
+
// {
|
|
585
|
+
// "success": false,
|
|
586
|
+
// "totalStatements": 15,
|
|
587
|
+
// "successCount": 12,
|
|
588
|
+
// "failureCount": 2,
|
|
589
|
+
// "skippedCount": 1,
|
|
590
|
+
// "statementResults": [
|
|
591
|
+
// { "index": 1, "lineNumber": 1, "type": "CREATE", "success": true },
|
|
592
|
+
// { "index": 5, "lineNumber": 23, "type": "INSERT", "success": false,
|
|
593
|
+
// "error": { "code": "23505", "constraint": "users_pkey", "detail": "Key already exists" } },
|
|
594
|
+
// { "index": 8, "lineNumber": 45, "type": "SELECT", "success": true, "skipped": true,
|
|
595
|
+
// "skipReason": "NEXTVAL increments sequence...", "explainPlan": [...] },
|
|
596
|
+
// ...
|
|
597
|
+
// ],
|
|
598
|
+
// "nonRollbackableWarnings": [
|
|
599
|
+
// { "operation": "SEQUENCE", "message": "INSERT may consume sequence values...", "mustSkip": false },
|
|
600
|
+
// { "operation": "SEQUENCE", "message": "NEXTVAL increments sequence...", "mustSkip": true }
|
|
601
|
+
// ],
|
|
602
|
+
// "summary": "Dry-run of 15 statements: 12 succeeded, 2 failed, 1 skipped (non-rollbackable). All changes rolled back.",
|
|
603
|
+
// "rolledBack": true
|
|
604
|
+
// }
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
**When to use `dry_run_sql_file` vs `preview_sql_file`:**
|
|
608
|
+
|
|
609
|
+
| Feature | `preview_sql_file` | `dry_run_sql_file` |
|
|
610
|
+
|---------|-------------------|-------------------|
|
|
611
|
+
| Speed | Fast (just parsing) | Slower (actual execution) |
|
|
612
|
+
| Detects syntax errors | Basic | **Actual PostgreSQL errors** |
|
|
613
|
+
| Detects constraint violations | No | **Yes** |
|
|
614
|
+
| Detects trigger effects | No | **Yes** |
|
|
615
|
+
| Accurate row counts | No (estimates) | **Yes (actual)** |
|
|
616
|
+
| Shows error details | No | **Yes (code, constraint, hint)** |
|
|
617
|
+
| Consumes sequences | No | **No (NEXTVAL/SETVAL skipped)** |
|
|
618
|
+
| Shows query plan for skipped ops | N/A | **Yes (EXPLAIN)** |
|
|
619
|
+
|
|
620
|
+
#### `batch_execute`
|
|
621
|
+
|
|
622
|
+
Execute multiple SQL queries in parallel. Returns all results keyed by query name. Efficient for fetching multiple independent pieces of data in a single call.
|
|
623
|
+
|
|
624
|
+
**Parameters:**
|
|
625
|
+
|
|
626
|
+
- `queries` (required): Array of queries to execute (max 20):
|
|
627
|
+
- `name`: Unique name for this query (used as key in results)
|
|
628
|
+
- `sql`: SQL query to execute
|
|
629
|
+
- `params` (optional): Query parameters
|
|
630
|
+
- `stopOnError` (optional): Stop on first error (default: false, continues with all queries)
|
|
631
|
+
|
|
632
|
+
**Returns:**
|
|
633
|
+
|
|
634
|
+
- `totalQueries`: Total number of queries in the batch
|
|
635
|
+
- `successCount`: Number of successful queries
|
|
636
|
+
- `failureCount`: Number of failed queries
|
|
637
|
+
- `totalExecutionTimeMs`: Total execution time in milliseconds
|
|
638
|
+
- `results`: Object with query results keyed by name:
|
|
639
|
+
- `success`: Whether the query succeeded
|
|
640
|
+
- `rows`: Result rows (if successful)
|
|
641
|
+
- `rowCount`: Number of rows returned
|
|
642
|
+
- `error`: Error message (if failed)
|
|
643
|
+
- `executionTimeMs`: Individual query execution time
|
|
644
|
+
|
|
645
|
+
**Example:**
|
|
646
|
+
|
|
647
|
+
```
|
|
648
|
+
batch_execute({
|
|
649
|
+
queries: [
|
|
650
|
+
{ name: "user_count", sql: "SELECT COUNT(*) FROM users" },
|
|
651
|
+
{ name: "order_total", sql: "SELECT SUM(total) FROM orders" },
|
|
652
|
+
{ name: "recent_signups", sql: "SELECT COUNT(*) FROM users WHERE created_at > NOW() - INTERVAL '7 days'" }
|
|
653
|
+
]
|
|
654
|
+
})
|
|
655
|
+
// Returns all three results in parallel, keyed by name
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
### Transaction Control
|
|
659
|
+
|
|
660
|
+
#### `begin_transaction`
|
|
661
|
+
|
|
662
|
+
Start a new database transaction. Returns a transactionId to use with `execute_sql`, `commit_transaction`, or `rollback_transaction`.
|
|
663
|
+
|
|
664
|
+
**Parameters:** None
|
|
665
|
+
|
|
666
|
+
**Returns:**
|
|
667
|
+
|
|
668
|
+
- `transactionId`: Unique ID for this transaction
|
|
669
|
+
- `status`: "started"
|
|
670
|
+
- `message`: Instructions for using the transaction
|
|
671
|
+
|
|
672
|
+
#### `commit_transaction`
|
|
673
|
+
|
|
674
|
+
Commit an active transaction, making all changes permanent.
|
|
675
|
+
|
|
676
|
+
**Parameters:**
|
|
677
|
+
|
|
678
|
+
- `transactionId` (required): The transaction ID returned by `begin_transaction`
|
|
679
|
+
|
|
680
|
+
#### `rollback_transaction`
|
|
681
|
+
|
|
682
|
+
Rollback an active transaction, undoing all changes made within it.
|
|
683
|
+
|
|
684
|
+
**Parameters:**
|
|
685
|
+
|
|
686
|
+
- `transactionId` (required): The transaction ID returned by `begin_transaction`
|
|
687
|
+
|
|
688
|
+
**Example - Transaction Usage:**
|
|
689
|
+
|
|
690
|
+
```
|
|
691
|
+
1. Call begin_transaction to get a transactionId
|
|
692
|
+
2. Call execute_sql with transactionId for each statement
|
|
693
|
+
3. Call commit_transaction to save changes, OR rollback_transaction to undo
|
|
694
|
+
```
|
|
695
|
+
|
|
334
696
|
#### `explain_query`
|
|
335
697
|
|
|
336
698
|
Gets the execution plan for a SQL query.
|
|
@@ -454,6 +816,62 @@ Supported error patterns include: `Connection terminated`, `ECONNRESET`, `ETIMED
|
|
|
454
816
|
|
|
455
817
|
Host URLs, ports, and credentials are never exposed in tool responses. Only server names (aliases) are visible, preventing accidental exposure of infrastructure details.
|
|
456
818
|
|
|
819
|
+
### Connection Context in Responses
|
|
820
|
+
|
|
821
|
+
All tool responses include a `connection` object showing which server, database, and schema the operation ran on:
|
|
822
|
+
|
|
823
|
+
```json
|
|
824
|
+
{
|
|
825
|
+
"rows": [...],
|
|
826
|
+
"connection": {
|
|
827
|
+
"server": "production",
|
|
828
|
+
"database": "myapp",
|
|
829
|
+
"schema": "public"
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
### Multi-Statement Execution
|
|
835
|
+
|
|
836
|
+
Execute multiple SQL statements in a single call using `allowMultipleStatements: true`:
|
|
837
|
+
|
|
838
|
+
```
|
|
839
|
+
execute_sql({
|
|
840
|
+
sql: "INSERT INTO logs VALUES (1); INSERT INTO logs VALUES (2); SELECT * FROM logs;",
|
|
841
|
+
allowMultipleStatements: true
|
|
842
|
+
})
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
Returns results for each statement with line numbers for easy debugging.
|
|
846
|
+
|
|
847
|
+
### Transaction Support
|
|
848
|
+
|
|
849
|
+
Explicit transaction control for atomic multi-statement operations:
|
|
850
|
+
|
|
851
|
+
```
|
|
852
|
+
1. begin_transaction() → returns transactionId
|
|
853
|
+
2. execute_sql({ sql: "UPDATE ...", transactionId: "..." })
|
|
854
|
+
3. execute_sql({ sql: "INSERT ...", transactionId: "..." })
|
|
855
|
+
4. commit_transaction({ transactionId: "..." }) OR rollback_transaction({ transactionId: "..." })
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
### Line Number Tracking
|
|
859
|
+
|
|
860
|
+
When `execute_sql_file` or multi-statement execution encounters errors, line numbers are included to help locate issues:
|
|
861
|
+
|
|
862
|
+
```json
|
|
863
|
+
{
|
|
864
|
+
"errors": [
|
|
865
|
+
{
|
|
866
|
+
"statementIndex": 5,
|
|
867
|
+
"lineNumber": 42,
|
|
868
|
+
"sql": "INSERT INTO...",
|
|
869
|
+
"error": "syntax error at or near..."
|
|
870
|
+
}
|
|
871
|
+
]
|
|
872
|
+
}
|
|
873
|
+
```
|
|
874
|
+
|
|
457
875
|
## Security
|
|
458
876
|
|
|
459
877
|
- **Access Mode**: By default, the server runs in **full access mode**. Set `POSTGRES_ACCESS_MODE=readonly` to prevent write operations (INSERT, UPDATE, DELETE, DROP, etc.). Recommended for production environments.
|
|
@@ -166,6 +166,50 @@ describe('DatabaseManager', () => {
|
|
|
166
166
|
// staging should still come from JSON
|
|
167
167
|
expect(manager.getServerConfig('staging')?.host).toBe('staging-host');
|
|
168
168
|
});
|
|
169
|
+
it('should parse context from PG_CONTEXT_* env vars', () => {
|
|
170
|
+
process.env.PG_NAME_1 = 'dev';
|
|
171
|
+
process.env.PG_HOST_1 = 'localhost';
|
|
172
|
+
process.env.PG_USERNAME_1 = 'user';
|
|
173
|
+
process.env.PG_CONTEXT_1 = 'Development server. Safe for any queries.';
|
|
174
|
+
process.env.PG_NAME_PROD = 'production';
|
|
175
|
+
process.env.PG_HOST_PROD = 'prod.example.com';
|
|
176
|
+
process.env.PG_USERNAME_PROD = 'prod_user';
|
|
177
|
+
process.env.PG_CONTEXT_PROD = 'PRODUCTION - Read-only queries only. Always use LIMIT.';
|
|
178
|
+
const manager = new DatabaseManager();
|
|
179
|
+
expect(manager.getServerConfig('dev')?.context).toBe('Development server. Safe for any queries.');
|
|
180
|
+
expect(manager.getServerConfig('production')?.context).toBe('PRODUCTION - Read-only queries only. Always use LIMIT.');
|
|
181
|
+
});
|
|
182
|
+
it('should parse context from POSTGRES_SERVERS JSON', () => {
|
|
183
|
+
process.env.POSTGRES_SERVERS = JSON.stringify({
|
|
184
|
+
dev: {
|
|
185
|
+
host: 'localhost',
|
|
186
|
+
port: '5432',
|
|
187
|
+
username: 'user',
|
|
188
|
+
password: 'pass',
|
|
189
|
+
context: 'Test environment with sample data.'
|
|
190
|
+
},
|
|
191
|
+
prod: {
|
|
192
|
+
host: 'prod.example.com',
|
|
193
|
+
port: '5432',
|
|
194
|
+
username: 'prod_user',
|
|
195
|
+
password: 'prod_pass',
|
|
196
|
+
context: 'Production - be careful!'
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
const manager = new DatabaseManager();
|
|
200
|
+
expect(manager.getServerConfig('dev')?.context).toBe('Test environment with sample data.');
|
|
201
|
+
expect(manager.getServerConfig('prod')?.context).toBe('Production - be careful!');
|
|
202
|
+
});
|
|
203
|
+
it('should include context in getConnectionInfo', () => {
|
|
204
|
+
process.env.PG_NAME_1 = 'dev';
|
|
205
|
+
process.env.PG_HOST_1 = 'localhost';
|
|
206
|
+
process.env.PG_USERNAME_1 = 'user';
|
|
207
|
+
process.env.PG_CONTEXT_1 = 'Development context here';
|
|
208
|
+
const manager = new DatabaseManager();
|
|
209
|
+
// Note: Not connected yet, so context should be undefined
|
|
210
|
+
const infoBeforeConnect = manager.getConnectionInfo();
|
|
211
|
+
expect(infoBeforeConnect.context).toBeUndefined();
|
|
212
|
+
});
|
|
169
213
|
});
|
|
170
214
|
describe('access mode from environment', () => {
|
|
171
215
|
it('should default to full access mode', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/db-manager.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/db-manager.test.ts"],"names":[],"mappings":"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"}
|