@neverinfamous/postgres-mcp 1.0.1
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/LICENSE +21 -0
- package/README.md +515 -0
- package/dist/__tests__/mocks/adapter.d.ts +80 -0
- package/dist/__tests__/mocks/adapter.d.ts.map +1 -0
- package/dist/__tests__/mocks/adapter.js +225 -0
- package/dist/__tests__/mocks/adapter.js.map +1 -0
- package/dist/__tests__/mocks/index.d.ts +11 -0
- package/dist/__tests__/mocks/index.d.ts.map +1 -0
- package/dist/__tests__/mocks/index.js +11 -0
- package/dist/__tests__/mocks/index.js.map +1 -0
- package/dist/__tests__/mocks/pool.d.ts +43 -0
- package/dist/__tests__/mocks/pool.d.ts.map +1 -0
- package/dist/__tests__/mocks/pool.js +71 -0
- package/dist/__tests__/mocks/pool.js.map +1 -0
- package/dist/adapters/DatabaseAdapter.d.ts +139 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +250 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/postgresql/PostgresAdapter.d.ts +119 -0
- package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -0
- package/dist/adapters/postgresql/PostgresAdapter.js +902 -0
- package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -0
- package/dist/adapters/postgresql/index.d.ts +5 -0
- package/dist/adapters/postgresql/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/index.js +5 -0
- package/dist/adapters/postgresql/index.js.map +1 -0
- package/dist/adapters/postgresql/prompts/backup.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/backup.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/backup.js +132 -0
- package/dist/adapters/postgresql/prompts/backup.js.map +1 -0
- package/dist/adapters/postgresql/prompts/citext.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/citext.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/citext.js +227 -0
- package/dist/adapters/postgresql/prompts/citext.js.map +1 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.js +282 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.js.map +1 -0
- package/dist/adapters/postgresql/prompts/health.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/health.js +118 -0
- package/dist/adapters/postgresql/prompts/health.js.map +1 -0
- package/dist/adapters/postgresql/prompts/index.d.ts +13 -0
- package/dist/adapters/postgresql/prompts/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/index.js +308 -0
- package/dist/adapters/postgresql/prompts/index.js.map +1 -0
- package/dist/adapters/postgresql/prompts/indexTuning.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/indexTuning.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/indexTuning.js +130 -0
- package/dist/adapters/postgresql/prompts/indexTuning.js.map +1 -0
- package/dist/adapters/postgresql/prompts/kcache.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/kcache.js +227 -0
- package/dist/adapters/postgresql/prompts/kcache.js.map +1 -0
- package/dist/adapters/postgresql/prompts/ltree.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/ltree.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/ltree.js +286 -0
- package/dist/adapters/postgresql/prompts/ltree.js.map +1 -0
- package/dist/adapters/postgresql/prompts/partman.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/partman.js +211 -0
- package/dist/adapters/postgresql/prompts/partman.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcron.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgcron.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcron.js +233 -0
- package/dist/adapters/postgresql/prompts/pgcron.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.js +299 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgvector.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgvector.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgvector.js +148 -0
- package/dist/adapters/postgresql/prompts/pgvector.js.map +1 -0
- package/dist/adapters/postgresql/prompts/postgis.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/postgis.js +200 -0
- package/dist/adapters/postgresql/prompts/postgis.js.map +1 -0
- package/dist/adapters/postgresql/resources/activity.d.ts +9 -0
- package/dist/adapters/postgresql/resources/activity.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/activity.js +118 -0
- package/dist/adapters/postgresql/resources/activity.js.map +1 -0
- package/dist/adapters/postgresql/resources/capabilities.d.ts +9 -0
- package/dist/adapters/postgresql/resources/capabilities.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/capabilities.js +182 -0
- package/dist/adapters/postgresql/resources/capabilities.js.map +1 -0
- package/dist/adapters/postgresql/resources/cron.d.ts +9 -0
- package/dist/adapters/postgresql/resources/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/cron.js +156 -0
- package/dist/adapters/postgresql/resources/cron.js.map +1 -0
- package/dist/adapters/postgresql/resources/crypto.d.ts +9 -0
- package/dist/adapters/postgresql/resources/crypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/crypto.js +191 -0
- package/dist/adapters/postgresql/resources/crypto.js.map +1 -0
- package/dist/adapters/postgresql/resources/extensions.d.ts +9 -0
- package/dist/adapters/postgresql/resources/extensions.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/extensions.js +85 -0
- package/dist/adapters/postgresql/resources/extensions.js.map +1 -0
- package/dist/adapters/postgresql/resources/health.d.ts +9 -0
- package/dist/adapters/postgresql/resources/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/health.js +185 -0
- package/dist/adapters/postgresql/resources/health.js.map +1 -0
- package/dist/adapters/postgresql/resources/index.d.ts +40 -0
- package/dist/adapters/postgresql/resources/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/index.js +87 -0
- package/dist/adapters/postgresql/resources/index.js.map +1 -0
- package/dist/adapters/postgresql/resources/indexes.d.ts +9 -0
- package/dist/adapters/postgresql/resources/indexes.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/indexes.js +130 -0
- package/dist/adapters/postgresql/resources/indexes.js.map +1 -0
- package/dist/adapters/postgresql/resources/kcache.d.ts +9 -0
- package/dist/adapters/postgresql/resources/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/kcache.js +219 -0
- package/dist/adapters/postgresql/resources/kcache.js.map +1 -0
- package/dist/adapters/postgresql/resources/locks.d.ts +9 -0
- package/dist/adapters/postgresql/resources/locks.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/locks.js +89 -0
- package/dist/adapters/postgresql/resources/locks.js.map +1 -0
- package/dist/adapters/postgresql/resources/partman.d.ts +9 -0
- package/dist/adapters/postgresql/resources/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/partman.js +149 -0
- package/dist/adapters/postgresql/resources/partman.js.map +1 -0
- package/dist/adapters/postgresql/resources/performance.d.ts +9 -0
- package/dist/adapters/postgresql/resources/performance.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/performance.js +170 -0
- package/dist/adapters/postgresql/resources/performance.js.map +1 -0
- package/dist/adapters/postgresql/resources/pool.d.ts +9 -0
- package/dist/adapters/postgresql/resources/pool.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/pool.js +93 -0
- package/dist/adapters/postgresql/resources/pool.js.map +1 -0
- package/dist/adapters/postgresql/resources/postgis.d.ts +9 -0
- package/dist/adapters/postgresql/resources/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/postgis.js +232 -0
- package/dist/adapters/postgresql/resources/postgis.js.map +1 -0
- package/dist/adapters/postgresql/resources/replication.d.ts +9 -0
- package/dist/adapters/postgresql/resources/replication.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/replication.js +126 -0
- package/dist/adapters/postgresql/resources/replication.js.map +1 -0
- package/dist/adapters/postgresql/resources/schema.d.ts +10 -0
- package/dist/adapters/postgresql/resources/schema.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/schema.js +80 -0
- package/dist/adapters/postgresql/resources/schema.js.map +1 -0
- package/dist/adapters/postgresql/resources/settings.d.ts +9 -0
- package/dist/adapters/postgresql/resources/settings.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/settings.js +184 -0
- package/dist/adapters/postgresql/resources/settings.js.map +1 -0
- package/dist/adapters/postgresql/resources/stats.d.ts +10 -0
- package/dist/adapters/postgresql/resources/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/stats.js +124 -0
- package/dist/adapters/postgresql/resources/stats.js.map +1 -0
- package/dist/adapters/postgresql/resources/tables.d.ts +9 -0
- package/dist/adapters/postgresql/resources/tables.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/tables.js +20 -0
- package/dist/adapters/postgresql/resources/tables.js.map +1 -0
- package/dist/adapters/postgresql/resources/vacuum.d.ts +9 -0
- package/dist/adapters/postgresql/resources/vacuum.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/vacuum.js +122 -0
- package/dist/adapters/postgresql/resources/vacuum.js.map +1 -0
- package/dist/adapters/postgresql/resources/vector.d.ts +9 -0
- package/dist/adapters/postgresql/resources/vector.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/vector.js +185 -0
- package/dist/adapters/postgresql/resources/vector.js.map +1 -0
- package/dist/adapters/postgresql/schemas/admin.d.ts +74 -0
- package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/admin.js +180 -0
- package/dist/adapters/postgresql/schemas/admin.js.map +1 -0
- package/dist/adapters/postgresql/schemas/backup.d.ts +68 -0
- package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/backup.js +114 -0
- package/dist/adapters/postgresql/schemas/backup.js.map +1 -0
- package/dist/adapters/postgresql/schemas/core.d.ts +443 -0
- package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/core.js +628 -0
- package/dist/adapters/postgresql/schemas/core.js.map +1 -0
- package/dist/adapters/postgresql/schemas/cron.d.ts +131 -0
- package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/cron.js +218 -0
- package/dist/adapters/postgresql/schemas/cron.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions.d.ts +403 -0
- package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions.js +600 -0
- package/dist/adapters/postgresql/schemas/extensions.js.map +1 -0
- package/dist/adapters/postgresql/schemas/index.d.ts +21 -0
- package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/index.js +72 -0
- package/dist/adapters/postgresql/schemas/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts +94 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb.js +198 -0
- package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -0
- package/dist/adapters/postgresql/schemas/monitoring.d.ts +28 -0
- package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/monitoring.js +45 -0
- package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/schemas/partitioning.d.ts +152 -0
- package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/partitioning.js +399 -0
- package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -0
- package/dist/adapters/postgresql/schemas/partman.d.ts +94 -0
- package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/partman.js +264 -0
- package/dist/adapters/postgresql/schemas/partman.js.map +1 -0
- package/dist/adapters/postgresql/schemas/performance.d.ts +52 -0
- package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/performance.js +57 -0
- package/dist/adapters/postgresql/schemas/performance.js.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis.d.ts +693 -0
- package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis.js +662 -0
- package/dist/adapters/postgresql/schemas/postgis.js.map +1 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +171 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.js +235 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -0
- package/dist/adapters/postgresql/schemas/stats.d.ts +229 -0
- package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/stats.js +587 -0
- package/dist/adapters/postgresql/schemas/stats.js.map +1 -0
- package/dist/adapters/postgresql/schemas/text-search.d.ts +83 -0
- package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/text-search.js +132 -0
- package/dist/adapters/postgresql/schemas/text-search.js.map +1 -0
- package/dist/adapters/postgresql/schemas/vector.d.ts +143 -0
- package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/vector.js +123 -0
- package/dist/adapters/postgresql/schemas/vector.js.map +1 -0
- package/dist/adapters/postgresql/tools/admin.d.ts +13 -0
- package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/admin.js +417 -0
- package/dist/adapters/postgresql/tools/admin.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/dump.d.ts +12 -0
- package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/dump.js +546 -0
- package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/backup/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/index.js +29 -0
- package/dist/adapters/postgresql/tools/backup/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/planning.d.ts +22 -0
- package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/planning.js +411 -0
- package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -0
- package/dist/adapters/postgresql/tools/citext.d.ts +18 -0
- package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/citext.js +568 -0
- package/dist/adapters/postgresql/tools/citext.js.map +1 -0
- package/dist/adapters/postgresql/tools/codemode/index.d.ts +27 -0
- package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/codemode/index.js +171 -0
- package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/convenience.d.ts +192 -0
- package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/convenience.js +617 -0
- package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/health.d.ts +20 -0
- package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/health.js +360 -0
- package/dist/adapters/postgresql/tools/core/health.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/index.js +40 -0
- package/dist/adapters/postgresql/tools/core/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/indexes.d.ts +30 -0
- package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/indexes.js +232 -0
- package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/objects.d.ts +20 -0
- package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/objects.js +361 -0
- package/dist/adapters/postgresql/tools/core/objects.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/query.d.ts +16 -0
- package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/query.js +87 -0
- package/dist/adapters/postgresql/tools/core/query.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/schemas.d.ts +135 -0
- package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/schemas.js +221 -0
- package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/tables.d.ts +24 -0
- package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/tables.js +219 -0
- package/dist/adapters/postgresql/tools/core/tables.js.map +1 -0
- package/dist/adapters/postgresql/tools/cron.d.ts +16 -0
- package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/cron.js +440 -0
- package/dist/adapters/postgresql/tools/cron.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts +33 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.js +681 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +20 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.js +654 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/index.js +39 -0
- package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/kcache.d.ts +20 -0
- package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/kcache.js +574 -0
- package/dist/adapters/postgresql/tools/kcache.js.map +1 -0
- package/dist/adapters/postgresql/tools/ltree.d.ts +8 -0
- package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/ltree.js +390 -0
- package/dist/adapters/postgresql/tools/ltree.js.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring.d.ts +13 -0
- package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring.js +753 -0
- package/dist/adapters/postgresql/tools/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning.d.ts +13 -0
- package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning.js +500 -0
- package/dist/adapters/postgresql/tools/partitioning.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/index.d.ts +19 -0
- package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/index.js +33 -0
- package/dist/adapters/postgresql/tools/partman/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/management.d.ts +28 -0
- package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/management.js +563 -0
- package/dist/adapters/postgresql/tools/partman/management.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/operations.d.ts +28 -0
- package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/operations.js +632 -0
- package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/analysis.js +383 -0
- package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/explain.d.ts +13 -0
- package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/explain.js +71 -0
- package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts +13 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.js +40 -0
- package/dist/adapters/postgresql/tools/performance/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.js +122 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/optimization.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/optimization.js +315 -0
- package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/stats.d.ts +14 -0
- package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/stats.js +559 -0
- package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -0
- package/dist/adapters/postgresql/tools/pgcrypto.d.ts +8 -0
- package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/pgcrypto.js +239 -0
- package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.d.ts +21 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.js +383 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts +16 -0
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/basic.js +479 -0
- package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/index.d.ts +17 -0
- package/dist/adapters/postgresql/tools/postgis/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/index.js +46 -0
- package/dist/adapters/postgresql/tools/postgis/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.d.ts +21 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.js +150 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -0
- package/dist/adapters/postgresql/tools/schema.d.ts +13 -0
- package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/schema.js +515 -0
- package/dist/adapters/postgresql/tools/schema.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts +24 -0
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/advanced.js +876 -0
- package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/basic.d.ts +24 -0
- package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/basic.js +501 -0
- package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/index.d.ts +17 -0
- package/dist/adapters/postgresql/tools/stats/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/index.js +30 -0
- package/dist/adapters/postgresql/tools/stats/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/text.d.ts +13 -0
- package/dist/adapters/postgresql/tools/text.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/text.js +708 -0
- package/dist/adapters/postgresql/tools/text.js.map +1 -0
- package/dist/adapters/postgresql/tools/transactions.d.ts +13 -0
- package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/transactions.js +201 -0
- package/dist/adapters/postgresql/tools/transactions.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/advanced.d.ts +12 -0
- package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/advanced.js +902 -0
- package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/basic.d.ts +25 -0
- package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/basic.js +1000 -0
- package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/index.d.ts +13 -0
- package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/index.js +33 -0
- package/dist/adapters/postgresql/tools/vector/index.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +44 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +117 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +42 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +80 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +36 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +139 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +102 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +16 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +61 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +156 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +65 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +189 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +208 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/args.d.ts +34 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +308 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +341 -0
- package/dist/cli.js.map +1 -0
- package/dist/codemode/api.d.ts +62 -0
- package/dist/codemode/api.d.ts.map +1 -0
- package/dist/codemode/api.js +1505 -0
- package/dist/codemode/api.js.map +1 -0
- package/dist/codemode/index.d.ts +13 -0
- package/dist/codemode/index.d.ts.map +1 -0
- package/dist/codemode/index.js +17 -0
- package/dist/codemode/index.js.map +1 -0
- package/dist/codemode/sandbox-factory.d.ts +72 -0
- package/dist/codemode/sandbox-factory.d.ts.map +1 -0
- package/dist/codemode/sandbox-factory.js +88 -0
- package/dist/codemode/sandbox-factory.js.map +1 -0
- package/dist/codemode/sandbox.d.ts +96 -0
- package/dist/codemode/sandbox.d.ts.map +1 -0
- package/dist/codemode/sandbox.js +345 -0
- package/dist/codemode/sandbox.js.map +1 -0
- package/dist/codemode/security.d.ts +44 -0
- package/dist/codemode/security.d.ts.map +1 -0
- package/dist/codemode/security.js +149 -0
- package/dist/codemode/security.js.map +1 -0
- package/dist/codemode/types.d.ts +137 -0
- package/dist/codemode/types.d.ts.map +1 -0
- package/dist/codemode/types.js +46 -0
- package/dist/codemode/types.js.map +1 -0
- package/dist/codemode/worker-sandbox.d.ts +82 -0
- package/dist/codemode/worker-sandbox.d.ts.map +1 -0
- package/dist/codemode/worker-sandbox.js +244 -0
- package/dist/codemode/worker-sandbox.js.map +1 -0
- package/dist/codemode/worker-script.d.ts +8 -0
- package/dist/codemode/worker-script.d.ts.map +1 -0
- package/dist/codemode/worker-script.js +113 -0
- package/dist/codemode/worker-script.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +13 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +405 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +43 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +352 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +90 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +315 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/pool/ConnectionPool.d.ts +70 -0
- package/dist/pool/ConnectionPool.d.ts.map +1 -0
- package/dist/pool/ConnectionPool.js +254 -0
- package/dist/pool/ConnectionPool.js.map +1 -0
- package/dist/server/McpServer.d.ts +50 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +108 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +126 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +303 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +8 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +7 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/adapters.d.ts +136 -0
- package/dist/types/adapters.d.ts.map +1 -0
- package/dist/types/adapters.js +7 -0
- package/dist/types/adapters.js.map +1 -0
- package/dist/types/database.d.ts +204 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/database.js +7 -0
- package/dist/types/database.js.map +1 -0
- package/dist/types/errors.d.ts +62 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +91 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/filtering.d.ts +39 -0
- package/dist/types/filtering.d.ts.map +1 -0
- package/dist/types/filtering.js +7 -0
- package/dist/types/filtering.js.map +1 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +31 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +7 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/oauth.d.ts +65 -0
- package/dist/types/oauth.d.ts.map +1 -0
- package/dist/types/oauth.js +7 -0
- package/dist/types/oauth.js.map +1 -0
- package/dist/types/schema.d.ts +110 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +7 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/utils/annotations.d.ts +42 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +75 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/icons.d.ts +25 -0
- package/dist/utils/icons.d.ts.map +1 -0
- package/dist/utils/icons.js +212 -0
- package/dist/utils/icons.js.map +1 -0
- package/dist/utils/identifiers.d.ts +111 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +270 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/logger.d.ts +141 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +304 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/promptGenerator.d.ts +20 -0
- package/dist/utils/promptGenerator.d.ts.map +1 -0
- package/dist/utils/promptGenerator.js +81 -0
- package/dist/utils/promptGenerator.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg_partman Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides pg_partman partition set status, configuration, and health.
|
|
5
|
+
*/
|
|
6
|
+
import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
/** Safely convert unknown value to string */
|
|
8
|
+
function toStr(value) {
|
|
9
|
+
return typeof value === "string" ? value : "";
|
|
10
|
+
}
|
|
11
|
+
export function createPartmanResource(adapter) {
|
|
12
|
+
return {
|
|
13
|
+
uri: "postgres://partman",
|
|
14
|
+
name: "pg_partman Status",
|
|
15
|
+
description: "pg_partman partition set configuration, partition counts, and health status",
|
|
16
|
+
mimeType: "application/json",
|
|
17
|
+
annotations: LOW_PRIORITY,
|
|
18
|
+
handler: async () => {
|
|
19
|
+
const result = {
|
|
20
|
+
extensionInstalled: false,
|
|
21
|
+
extensionVersion: null,
|
|
22
|
+
partitionSets: [],
|
|
23
|
+
partitionSetCount: 0,
|
|
24
|
+
partitionInfo: [],
|
|
25
|
+
healthIssues: [],
|
|
26
|
+
maintenanceScheduled: false,
|
|
27
|
+
maintenanceJobCount: 0,
|
|
28
|
+
recommendations: [],
|
|
29
|
+
};
|
|
30
|
+
// Check if pg_partman is installed and get its schema (outside try-catch for correct error messaging)
|
|
31
|
+
const extCheck = await adapter.executeQuery(`SELECT e.extversion, n.nspname as schema_name
|
|
32
|
+
FROM pg_extension e
|
|
33
|
+
JOIN pg_namespace n ON e.extnamespace = n.oid
|
|
34
|
+
WHERE e.extname = 'pg_partman'`);
|
|
35
|
+
if (!extCheck.rows || extCheck.rows.length === 0) {
|
|
36
|
+
result.recommendations.push("pg_partman extension is not installed. Use pg_partman_create_extension to enable automated partition management.");
|
|
37
|
+
return JSON.stringify(result, null, 2);
|
|
38
|
+
}
|
|
39
|
+
result.extensionInstalled = true;
|
|
40
|
+
const extVersion = extCheck.rows[0]?.["extversion"];
|
|
41
|
+
result.extensionVersion =
|
|
42
|
+
typeof extVersion === "string" ? extVersion : null;
|
|
43
|
+
// Get the schema where pg_partman is installed (defaults to 'partman' for compatibility)
|
|
44
|
+
const partmanSchemaRaw = extCheck.rows[0]?.["schema_name"];
|
|
45
|
+
const partmanSchema = typeof partmanSchemaRaw === "string" ? partmanSchemaRaw : "partman";
|
|
46
|
+
try {
|
|
47
|
+
// Get partition configurations using dynamically detected schema
|
|
48
|
+
const configResult = await adapter.executeQuery(`SELECT parent_table, control, partition_interval::text,
|
|
49
|
+
retention::text, premake, datetime_string
|
|
50
|
+
FROM "${partmanSchema}".part_config
|
|
51
|
+
ORDER BY parent_table`);
|
|
52
|
+
if (configResult.rows) {
|
|
53
|
+
for (const row of configResult.rows) {
|
|
54
|
+
const retentionVal = row["retention"];
|
|
55
|
+
const datetimeVal = row["datetime_string"];
|
|
56
|
+
result.partitionSets.push({
|
|
57
|
+
parent_table: toStr(row["parent_table"]),
|
|
58
|
+
control: toStr(row["control"]),
|
|
59
|
+
partition_interval: toStr(row["partition_interval"]),
|
|
60
|
+
retention: typeof retentionVal === "string" ? retentionVal : null,
|
|
61
|
+
premake: Number(row["premake"] ?? 0),
|
|
62
|
+
datetime_string: typeof datetimeVal === "string" ? datetimeVal : null,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
result.partitionSetCount = result.partitionSets.length;
|
|
66
|
+
}
|
|
67
|
+
// Get partition counts and sizes for each parent
|
|
68
|
+
for (const config of result.partitionSets) {
|
|
69
|
+
try {
|
|
70
|
+
const infoResult = await adapter.executeQuery(`SELECT COUNT(*)::int as partition_count,
|
|
71
|
+
pg_size_pretty(SUM(pg_total_relation_size(inhrelid))) as total_size
|
|
72
|
+
FROM pg_inherits
|
|
73
|
+
WHERE inhparent = $1::regclass`, [config.parent_table]);
|
|
74
|
+
// Check for default partition with data
|
|
75
|
+
const defaultCheck = await adapter.executeQuery(`SELECT EXISTS(
|
|
76
|
+
SELECT 1 FROM pg_partitioned_table pt
|
|
77
|
+
JOIN pg_class c ON pt.partrelid = c.oid
|
|
78
|
+
WHERE c.relname = split_part($1, '.', 2)
|
|
79
|
+
AND pt.partdefid != 0
|
|
80
|
+
) as has_default,
|
|
81
|
+
COALESCE((
|
|
82
|
+
SELECT n_live_tup::int FROM pg_stat_user_tables
|
|
83
|
+
WHERE schemaname || '.' || relname = $1 || '_default'
|
|
84
|
+
), 0) as default_rows`, [config.parent_table]);
|
|
85
|
+
const partitionCount = Number(infoResult.rows?.[0]?.["partition_count"] ?? 0);
|
|
86
|
+
const totalSizeVal = infoResult.rows?.[0]?.["total_size"];
|
|
87
|
+
const totalSize = typeof totalSizeVal === "string" ? totalSizeVal : "0 bytes";
|
|
88
|
+
const hasDefault = Boolean(defaultCheck.rows?.[0]?.["has_default"]);
|
|
89
|
+
const defaultRows = Number(defaultCheck.rows?.[0]?.["default_rows"] ?? 0);
|
|
90
|
+
result.partitionInfo.push({
|
|
91
|
+
parent_table: config.parent_table,
|
|
92
|
+
partition_count: partitionCount,
|
|
93
|
+
total_size: totalSize,
|
|
94
|
+
has_default: hasDefault,
|
|
95
|
+
default_rows: defaultRows,
|
|
96
|
+
});
|
|
97
|
+
// Check for data in default partition
|
|
98
|
+
if (defaultRows > 0) {
|
|
99
|
+
result.healthIssues.push({
|
|
100
|
+
table: config.parent_table,
|
|
101
|
+
issue: `Default partition contains ${String(defaultRows)} rows. Use pg_partman_partition_data to move to child partitions.`,
|
|
102
|
+
severity: defaultRows > 10000 ? "critical" : "warning",
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Check retention configuration - only warn for tables with many partitions
|
|
106
|
+
// where unlimited retention is more likely to be an oversight
|
|
107
|
+
if (config.retention === null && partitionCount > 12) {
|
|
108
|
+
result.recommendations.push(`${config.parent_table}: No retention policy configured (${String(partitionCount)} partitions). Consider pg_partman_set_retention for cleanup, or ignore if unlimited retention is intended.`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Individual table error, continue
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Generate recommendations
|
|
116
|
+
if (result.partitionSetCount === 0) {
|
|
117
|
+
result.recommendations.push("No partition sets configured. Use pg_partman_create_parent to create managed partitions.");
|
|
118
|
+
}
|
|
119
|
+
// Check for maintenance scheduling with broader pattern matching
|
|
120
|
+
try {
|
|
121
|
+
const cronCheck = await adapter.executeQuery(`SELECT COUNT(*)::int as count FROM cron.job
|
|
122
|
+
WHERE command ILIKE '%partman%'
|
|
123
|
+
OR command ILIKE '%run_maintenance%'
|
|
124
|
+
OR command ILIKE '%partition%maintenance%'`);
|
|
125
|
+
const cronCount = Number(cronCheck.rows?.[0]?.["count"] ?? 0);
|
|
126
|
+
result.maintenanceScheduled = cronCount > 0;
|
|
127
|
+
result.maintenanceJobCount = cronCount;
|
|
128
|
+
result.maintenanceMethod = cronCount > 0 ? "pg_cron" : "unknown";
|
|
129
|
+
if (cronCount === 0 && result.partitionSetCount > 0) {
|
|
130
|
+
result.recommendations.push("No pg_cron job found for partition maintenance. Setup options:", "Option 1 - pg_cron (recommended): SELECT cron.schedule('partman-maintenance', '*/30 * * * *', $$CALL partman.run_maintenance_proc()$$);", 'Option 2 - External: Add to system cron: */30 * * * * psql -c "CALL partman.run_maintenance_proc()"', "Run frequency: Every 30 minutes is typical. Adjust based on partition interval (faster intervals need more frequent runs).");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// pg_cron not installed
|
|
135
|
+
result.maintenanceMethod = "external_or_none";
|
|
136
|
+
if (result.partitionSetCount > 0) {
|
|
137
|
+
result.recommendations.push("pg_cron not detected. Use external scheduling for maintenance:", 'System cron example: */30 * * * * psql -d your_database -c "CALL partman.run_maintenance_proc()"', "Windows Task Scheduler: Run psql command every 30 minutes", "Alternatively, install pg_cron: shared_preload_libraries = 'pg_cron' in postgresql.conf then restart");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Extension is installed but data queries failed
|
|
143
|
+
result.recommendations.push("Error querying pg_partman data. Check permissions on partman schema tables.");
|
|
144
|
+
}
|
|
145
|
+
return JSON.stringify(result, null, 2);
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=partman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partman.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/partman.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Resource
|
|
3
|
+
*
|
|
4
|
+
* Query performance metrics from pg_stat_statements.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createPerformanceResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/performance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAGjC,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAkLpB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Resource
|
|
3
|
+
*
|
|
4
|
+
* Query performance metrics from pg_stat_statements.
|
|
5
|
+
*/
|
|
6
|
+
import { MEDIUM_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createPerformanceResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://performance",
|
|
10
|
+
name: "Query Performance",
|
|
11
|
+
description: "Query performance metrics from pg_stat_statements",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: MEDIUM_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
// Check if pg_stat_statements is available
|
|
16
|
+
const extResult = await adapter.executeQuery(`
|
|
17
|
+
SELECT COUNT(*) as count
|
|
18
|
+
FROM pg_extension
|
|
19
|
+
WHERE extname = 'pg_stat_statements'
|
|
20
|
+
`);
|
|
21
|
+
const countValue = extResult.rows?.[0]?.["count"];
|
|
22
|
+
const hasPgStat = Number(countValue ?? 0) > 0;
|
|
23
|
+
if (!hasPgStat) {
|
|
24
|
+
return {
|
|
25
|
+
extensionStatus: "not_installed",
|
|
26
|
+
error: "pg_stat_statements extension not installed",
|
|
27
|
+
recommendation: "Run: CREATE EXTENSION pg_stat_statements;",
|
|
28
|
+
benefits: [
|
|
29
|
+
"Track query performance and identify slow queries",
|
|
30
|
+
"Optimize workload based on actual usage patterns",
|
|
31
|
+
"Enable all performance intelligence tools",
|
|
32
|
+
"Critical for production database monitoring",
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
// Configurable thresholds
|
|
38
|
+
const SLOW_QUERY_THRESHOLD_MS = 1000; // 1 second mean time
|
|
39
|
+
const HIGH_COST_THRESHOLD_MS = 5000; // 5 seconds total time
|
|
40
|
+
// Get top queries by total time (filter out queries with 0 calls - no useful data)
|
|
41
|
+
const topQueries = await adapter.executeQuery(`
|
|
42
|
+
SELECT
|
|
43
|
+
LEFT(query, 200) as query_preview,
|
|
44
|
+
calls,
|
|
45
|
+
round(total_exec_time::numeric, 2) as total_time_ms,
|
|
46
|
+
round(mean_exec_time::numeric, 2) as mean_time_ms,
|
|
47
|
+
round(stddev_exec_time::numeric, 2) as stddev_time_ms,
|
|
48
|
+
rows,
|
|
49
|
+
round(100.0 * shared_blks_hit / NULLIF(shared_blks_hit + shared_blks_read, 0), 2) as cache_hit_pct
|
|
50
|
+
FROM pg_stat_statements
|
|
51
|
+
WHERE userid = (SELECT oid FROM pg_roles WHERE rolname = current_user)
|
|
52
|
+
AND calls > 0
|
|
53
|
+
ORDER BY total_exec_time DESC
|
|
54
|
+
LIMIT 20
|
|
55
|
+
`);
|
|
56
|
+
// Get slow queries (high mean execution time)
|
|
57
|
+
const slowQueries = await adapter.executeQuery(`
|
|
58
|
+
SELECT
|
|
59
|
+
LEFT(query, 200) as query_preview,
|
|
60
|
+
calls,
|
|
61
|
+
round(mean_exec_time::numeric, 2) as mean_time_ms,
|
|
62
|
+
round(total_exec_time::numeric, 2) as total_time_ms
|
|
63
|
+
FROM pg_stat_statements
|
|
64
|
+
WHERE userid = (SELECT oid FROM pg_roles WHERE rolname = current_user)
|
|
65
|
+
AND calls > 0
|
|
66
|
+
AND mean_exec_time > ${String(SLOW_QUERY_THRESHOLD_MS)}
|
|
67
|
+
ORDER BY mean_exec_time DESC
|
|
68
|
+
LIMIT 10
|
|
69
|
+
`);
|
|
70
|
+
// Get high-cost queries (high total execution time)
|
|
71
|
+
const highCostQueries = await adapter.executeQuery(`
|
|
72
|
+
SELECT
|
|
73
|
+
LEFT(query, 200) as query_preview,
|
|
74
|
+
calls,
|
|
75
|
+
round(total_exec_time::numeric, 2) as total_time_ms,
|
|
76
|
+
round(mean_exec_time::numeric, 2) as mean_time_ms
|
|
77
|
+
FROM pg_stat_statements
|
|
78
|
+
WHERE userid = (SELECT oid FROM pg_roles WHERE rolname = current_user)
|
|
79
|
+
AND calls > 0
|
|
80
|
+
AND total_exec_time > ${String(HIGH_COST_THRESHOLD_MS)}
|
|
81
|
+
ORDER BY total_exec_time DESC
|
|
82
|
+
LIMIT 10
|
|
83
|
+
`);
|
|
84
|
+
// Get summary statistics
|
|
85
|
+
const summary = await adapter.executeQuery(`
|
|
86
|
+
SELECT
|
|
87
|
+
COUNT(*) as total_queries,
|
|
88
|
+
SUM(calls) as total_calls,
|
|
89
|
+
round(SUM(total_exec_time)::numeric, 2) as total_time_ms,
|
|
90
|
+
round(AVG(mean_exec_time)::numeric, 2) as avg_time_ms
|
|
91
|
+
FROM pg_stat_statements
|
|
92
|
+
WHERE userid = (SELECT oid FROM pg_roles WHERE rolname = current_user)
|
|
93
|
+
AND calls > 0
|
|
94
|
+
`);
|
|
95
|
+
const recommendations = [
|
|
96
|
+
"Use pg_explain_analyze for detailed query analysis",
|
|
97
|
+
"Consider pg_query_plan_compare for optimization testing",
|
|
98
|
+
];
|
|
99
|
+
// Add context-aware recommendations
|
|
100
|
+
const slowCount = slowQueries.rows?.length ?? 0;
|
|
101
|
+
const highCostCount = highCostQueries.rows?.length ?? 0;
|
|
102
|
+
if (slowCount > 0) {
|
|
103
|
+
recommendations.unshift(`${String(slowCount)} queries with mean time > ${String(SLOW_QUERY_THRESHOLD_MS)}ms detected. Consider adding indexes or query optimization.`);
|
|
104
|
+
}
|
|
105
|
+
if (highCostCount > 0) {
|
|
106
|
+
recommendations.unshift(`${String(highCostCount)} high-cost queries detected (total time > ${String(HIGH_COST_THRESHOLD_MS)}ms).`);
|
|
107
|
+
}
|
|
108
|
+
// Check if we have any meaningful data
|
|
109
|
+
const hasData = (topQueries.rows?.length ?? 0) > 0;
|
|
110
|
+
// Check if ANY stats exist (even for other users) to provide better context
|
|
111
|
+
let anyStatsExist = false;
|
|
112
|
+
try {
|
|
113
|
+
const anyStatsResult = await adapter.executeQuery(`
|
|
114
|
+
SELECT EXISTS(SELECT 1 FROM pg_stat_statements WHERE calls > 0 LIMIT 1) as has_any
|
|
115
|
+
`);
|
|
116
|
+
anyStatsExist = Boolean(anyStatsResult.rows?.[0]?.["has_any"]);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* ignore - permission may be limited */
|
|
120
|
+
}
|
|
121
|
+
const noQueryData = !hasData
|
|
122
|
+
? {
|
|
123
|
+
reason: anyStatsExist
|
|
124
|
+
? "Query statistics exist but no queries found for current user"
|
|
125
|
+
: "No query statistics with calls > 0 found",
|
|
126
|
+
suggestions: anyStatsExist
|
|
127
|
+
? [
|
|
128
|
+
"Other users may have query data - check with superuser privileges",
|
|
129
|
+
"Run some queries as the current user and check again",
|
|
130
|
+
]
|
|
131
|
+
: [
|
|
132
|
+
"Statistics may have been recently reset",
|
|
133
|
+
"Run some queries and check again",
|
|
134
|
+
"Use SELECT pg_stat_statements_reset() to clear stale data if needed",
|
|
135
|
+
],
|
|
136
|
+
}
|
|
137
|
+
: undefined;
|
|
138
|
+
return {
|
|
139
|
+
extensionStatus: "installed",
|
|
140
|
+
summary: summary.rows?.[0] ?? {},
|
|
141
|
+
topQueries: topQueries.rows ?? [],
|
|
142
|
+
slowQueries: slowQueries.rows ?? [],
|
|
143
|
+
highCostQueries: highCostQueries.rows ?? [],
|
|
144
|
+
thresholds: {
|
|
145
|
+
slowQueryMs: SLOW_QUERY_THRESHOLD_MS,
|
|
146
|
+
highCostMs: HIGH_COST_THRESHOLD_MS,
|
|
147
|
+
},
|
|
148
|
+
recommendations,
|
|
149
|
+
noQueryData,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Extension is installed but data queries failed (likely permission issue)
|
|
154
|
+
return {
|
|
155
|
+
extensionStatus: "installed",
|
|
156
|
+
error: "Error querying pg_stat_statements data. Check permissions or ensure pg_stat_statements is in shared_preload_libraries.",
|
|
157
|
+
summary: {},
|
|
158
|
+
topQueries: [],
|
|
159
|
+
slowQueries: [],
|
|
160
|
+
highCostQueries: [],
|
|
161
|
+
recommendations: [
|
|
162
|
+
"Grant SELECT on pg_stat_statements to current user",
|
|
163
|
+
"Verify pg_stat_statements is in shared_preload_libraries",
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool Resource
|
|
3
|
+
*
|
|
4
|
+
* MCP server connection pool statistics with external pooler detection.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createPoolResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/pool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AASjC,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA2FpB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool Resource
|
|
3
|
+
*
|
|
4
|
+
* MCP server connection pool statistics with external pooler detection.
|
|
5
|
+
*/
|
|
6
|
+
import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createPoolResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://pool",
|
|
10
|
+
name: "Connection Pool",
|
|
11
|
+
description: "MCP server connection pool statistics with external pooler detection",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: LOW_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
const pool = adapter.getPool();
|
|
16
|
+
if (!pool) {
|
|
17
|
+
return { error: "Pool not initialized" };
|
|
18
|
+
}
|
|
19
|
+
const stats = pool.getStats();
|
|
20
|
+
const health = await pool.checkHealth();
|
|
21
|
+
// Determine pool status
|
|
22
|
+
let status;
|
|
23
|
+
if (stats.total === 0) {
|
|
24
|
+
status = "empty";
|
|
25
|
+
}
|
|
26
|
+
else if (stats.active > 0 && stats.active >= stats.total - 1) {
|
|
27
|
+
status = "busy";
|
|
28
|
+
}
|
|
29
|
+
else if (stats.active > 0) {
|
|
30
|
+
status = "active";
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
status = "idle";
|
|
34
|
+
}
|
|
35
|
+
// Detect external poolers
|
|
36
|
+
const externalPooler = {
|
|
37
|
+
detected: false,
|
|
38
|
+
type: "none",
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
// Check for pgbouncer by looking for its admin database or signature
|
|
42
|
+
const pgbouncerCheck = await adapter.executeQuery(`
|
|
43
|
+
SELECT COUNT(*) as count FROM pg_database WHERE datname = 'pgbouncer'
|
|
44
|
+
`);
|
|
45
|
+
const hasPgbouncerDb = Number(pgbouncerCheck.rows?.[0]?.["count"] ?? 0) > 0;
|
|
46
|
+
if (hasPgbouncerDb) {
|
|
47
|
+
externalPooler.detected = true;
|
|
48
|
+
externalPooler.type = "pgbouncer";
|
|
49
|
+
externalPooler.hint =
|
|
50
|
+
'pgbouncer database detected. Use "SHOW POOLS" on pgbouncer admin database for pooler stats.';
|
|
51
|
+
}
|
|
52
|
+
// Alternative detection: check for pgbouncer in application_name patterns
|
|
53
|
+
if (!hasPgbouncerDb) {
|
|
54
|
+
const appNameCheck = await adapter.executeQuery(`
|
|
55
|
+
SELECT COUNT(*) as count FROM pg_stat_activity
|
|
56
|
+
WHERE application_name ILIKE '%pgbouncer%' OR application_name ILIKE '%pgpool%'
|
|
57
|
+
`);
|
|
58
|
+
const hasPoolerConnections = Number(appNameCheck.rows?.[0]?.["count"] ?? 0) > 0;
|
|
59
|
+
if (hasPoolerConnections) {
|
|
60
|
+
externalPooler.detected = true;
|
|
61
|
+
externalPooler.type = "pgbouncer";
|
|
62
|
+
externalPooler.hint =
|
|
63
|
+
"Connections via external pooler detected. This resource shows MCP internal pool stats only.";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Detection failed, continue with default
|
|
69
|
+
}
|
|
70
|
+
// Build contextual note
|
|
71
|
+
let note = "Reports the MCP server internal connection pool.";
|
|
72
|
+
if (status === "empty" || status === "idle") {
|
|
73
|
+
note += " Values of 0 are normal when the pool is idle.";
|
|
74
|
+
}
|
|
75
|
+
if (externalPooler.detected) {
|
|
76
|
+
note += ` External pooler (${externalPooler.type}) detected - see externalPooler.hint for querying pooler stats.`;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
note +=
|
|
80
|
+
" For external poolers like PgBouncer, query the pgbouncer admin database directly.";
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
stats,
|
|
84
|
+
health,
|
|
85
|
+
isInitialized: pool.isInitialized(),
|
|
86
|
+
status,
|
|
87
|
+
externalPooler,
|
|
88
|
+
note,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostGIS Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides PostGIS extension status, spatial columns, and index information.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createPostgisResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=postgis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgis.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/postgis.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAoDlE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAgSpB"}
|