@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,iBAAiB;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,qDAAqD;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAwB;IAExB,OAAO;QACL,iBAAiB;QACjB,oBAAoB,CAAC,OAAO,CAAC;QAC7B,oBAAoB,CAAC,OAAO,CAAC;QAC7B,sBAAsB,CAAC,OAAO,CAAC;QAC/B,mBAAmB,CAAC,OAAO,CAAC;QAC5B,sBAAsB,CAAC,OAAO,CAAC;QAC/B,kBAAkB,CAAC,OAAO,CAAC;QAC3B,qBAAqB;QACrB,0BAA0B,CAAC,OAAO,CAAC;QACnC,yBAAyB,CAAC,OAAO,CAAC;QAClC,oBAAoB,CAAC,OAAO,CAAC;QAC7B,wBAAwB,CAAC,OAAO,CAAC;QACjC,qBAAqB,CAAC,OAAO,CAAC;QAC9B,yBAAyB,CAAC,OAAO,CAAC;QAClC,oBAAoB,CAAC,OAAO,CAAC;QAC7B,mBAAmB,CAAC,OAAO,CAAC;QAC5B,6BAA6B;QAC7B,kBAAkB,CAAC,OAAO,CAAC;QAC3B,qBAAqB,CAAC,OAAO,CAAC;QAC9B,oBAAoB,CAAC,OAAO,CAAC;QAC7B,oBAAoB,CAAC,OAAO,CAAC;QAC7B,qBAAqB,CAAC,OAAO,CAAC;QAC9B,oBAAoB,CAAC,OAAO,CAAC;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexes Resource
|
|
3
|
+
*
|
|
4
|
+
* Index usage statistics with unused/rarely-used detection and DROP recommendations.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createIndexesResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=indexes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/indexes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAmCjC,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAqJpB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexes Resource
|
|
3
|
+
*
|
|
4
|
+
* Index usage statistics with unused/rarely-used detection and DROP recommendations.
|
|
5
|
+
*/
|
|
6
|
+
import { MEDIUM_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createIndexesResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://indexes",
|
|
10
|
+
name: "Index Statistics",
|
|
11
|
+
description: "Index usage statistics with unused/rarely-used detection and DROP recommendations",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: MEDIUM_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
// Get index usage statistics including last scan time and table row count
|
|
16
|
+
const indexResult = await adapter.executeQuery(`
|
|
17
|
+
SELECT
|
|
18
|
+
sui.schemaname,
|
|
19
|
+
sui.relname as tablename,
|
|
20
|
+
sui.indexrelname as indexname,
|
|
21
|
+
sui.idx_scan as index_scans,
|
|
22
|
+
sui.idx_tup_read as tuples_read,
|
|
23
|
+
sui.idx_tup_fetch as tuples_fetched,
|
|
24
|
+
pg_size_pretty(pg_relation_size(sui.indexrelid)) as index_size,
|
|
25
|
+
pg_relation_size(sui.indexrelid) as size_bytes,
|
|
26
|
+
sui.last_idx_scan,
|
|
27
|
+
(sui.idx_scan = 0 AND sui.last_idx_scan IS NULL) as potentially_new,
|
|
28
|
+
COALESCE(sut.n_live_tup, 0) as table_rows
|
|
29
|
+
FROM pg_stat_user_indexes sui
|
|
30
|
+
LEFT JOIN pg_stat_user_tables sut ON sui.relid = sut.relid
|
|
31
|
+
WHERE sui.schemaname NOT IN ('pg_catalog', 'information_schema')
|
|
32
|
+
ORDER BY sui.idx_scan ASC, pg_relation_size(sui.indexrelid) DESC
|
|
33
|
+
LIMIT 50
|
|
34
|
+
`);
|
|
35
|
+
const indexes = (indexResult.rows ?? []);
|
|
36
|
+
// Separate indexes by status with improved categorization
|
|
37
|
+
// Empty table indexes: 0 scans because table has no data
|
|
38
|
+
const emptyTableIndexes = indexes.filter((idx) => idx.index_scans === 0 && idx.table_rows === 0);
|
|
39
|
+
// Potentially new: 0 scans, table has data, no scan history
|
|
40
|
+
const potentiallyNewIndexes = indexes.filter((idx) => idx.index_scans === 0 && idx.potentially_new && idx.table_rows > 0);
|
|
41
|
+
// Truly unused: 0 scans, table has data, has scan history (was used before)
|
|
42
|
+
const trulyUnusedIndexes = indexes.filter((idx) => idx.index_scans === 0 &&
|
|
43
|
+
!idx.potentially_new &&
|
|
44
|
+
idx.table_rows > 0 &&
|
|
45
|
+
idx.size_bytes > 1024 * 1024);
|
|
46
|
+
const rarelyUsed = indexes.filter((idx) => idx.index_scans > 0 &&
|
|
47
|
+
idx.index_scans < 100 &&
|
|
48
|
+
idx.size_bytes > 10 * 1024 * 1024);
|
|
49
|
+
// Generate recommendations
|
|
50
|
+
const recommendations = [];
|
|
51
|
+
// Include indexes on empty tables as info
|
|
52
|
+
for (const idx of emptyTableIndexes.slice(0, 3)) {
|
|
53
|
+
recommendations.push({
|
|
54
|
+
type: "EMPTY_TABLE",
|
|
55
|
+
priority: "INFO",
|
|
56
|
+
index: idx.schemaname + "." + idx.indexname,
|
|
57
|
+
table: idx.tablename,
|
|
58
|
+
size: idx.index_size,
|
|
59
|
+
scans: idx.index_scans,
|
|
60
|
+
tableRows: idx.table_rows,
|
|
61
|
+
message: "Index has 0 scans because table is empty. Will be used when data is inserted.",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Include recently created indexes as info only
|
|
65
|
+
for (const idx of potentiallyNewIndexes.slice(0, 3)) {
|
|
66
|
+
recommendations.push({
|
|
67
|
+
type: "RECENTLY_CREATED",
|
|
68
|
+
priority: "LOW",
|
|
69
|
+
index: idx.schemaname + "." + idx.indexname,
|
|
70
|
+
table: idx.tablename,
|
|
71
|
+
size: idx.index_size,
|
|
72
|
+
scans: idx.index_scans,
|
|
73
|
+
tableRows: idx.table_rows,
|
|
74
|
+
message: `Index has 0 scans on active table (${String(idx.table_rows)} rows). May be newly created or for rarely-run queries.`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (const idx of trulyUnusedIndexes.slice(0, 5)) {
|
|
78
|
+
recommendations.push({
|
|
79
|
+
type: "UNUSED_INDEX",
|
|
80
|
+
priority: "HIGH",
|
|
81
|
+
index: idx.schemaname + "." + idx.indexname,
|
|
82
|
+
table: idx.tablename,
|
|
83
|
+
size: idx.index_size,
|
|
84
|
+
scans: idx.index_scans,
|
|
85
|
+
action: "DROP INDEX IF EXISTS " +
|
|
86
|
+
idx.schemaname +
|
|
87
|
+
"." +
|
|
88
|
+
idx.indexname +
|
|
89
|
+
";",
|
|
90
|
+
benefit: "Reclaim " + idx.index_size + " and reduce write overhead",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
for (const idx of rarelyUsed.slice(0, 3)) {
|
|
94
|
+
recommendations.push({
|
|
95
|
+
type: "RARELY_USED",
|
|
96
|
+
priority: "MEDIUM",
|
|
97
|
+
index: idx.schemaname + "." + idx.indexname,
|
|
98
|
+
table: idx.tablename,
|
|
99
|
+
size: idx.index_size,
|
|
100
|
+
scans: idx.index_scans,
|
|
101
|
+
action: "-- Review before dropping: " +
|
|
102
|
+
idx.schemaname +
|
|
103
|
+
"." +
|
|
104
|
+
idx.indexname,
|
|
105
|
+
benefit: idx.index_scans.toString() +
|
|
106
|
+
" scans for " +
|
|
107
|
+
idx.index_size +
|
|
108
|
+
" index",
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (recommendations.length === 0) {
|
|
112
|
+
recommendations.push({
|
|
113
|
+
type: "HEALTHY",
|
|
114
|
+
message: "No obvious index optimization opportunities found",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
totalIndexes: indexes.length,
|
|
119
|
+
emptyTableIndexes: emptyTableIndexes.length,
|
|
120
|
+
potentiallyNewIndexes: potentiallyNewIndexes.length,
|
|
121
|
+
unusedIndexes: trulyUnusedIndexes.length,
|
|
122
|
+
rarelyUsedIndexes: rarelyUsed.length,
|
|
123
|
+
indexDetails: indexes.slice(0, 20),
|
|
124
|
+
recommendations,
|
|
125
|
+
summary: `Analyzed ${indexes.length.toString()} indexes. Found ${trulyUnusedIndexes.length.toString()} unused on active tables, ${emptyTableIndexes.length.toString()} on empty tables, ${potentiallyNewIndexes.length.toString()} potentially new, and ${rarelyUsed.length.toString()} rarely-used.`,
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=indexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/indexes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg_stat_kcache Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides pg_stat_kcache OS-level performance metrics summary.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createKcacheResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=kcache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kcache.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/kcache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAmFlE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA0PpB"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg_stat_kcache Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides pg_stat_kcache OS-level performance metrics summary.
|
|
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
|
+
async function getKcacheColumnNames(adapter) {
|
|
12
|
+
const result = await adapter.executeQuery(`
|
|
13
|
+
SELECT column_name FROM information_schema.columns
|
|
14
|
+
WHERE table_name = 'pg_stat_kcache' AND column_name = 'exec_user_time'
|
|
15
|
+
`);
|
|
16
|
+
const isNewVersion = (result.rows?.length ?? 0) > 0;
|
|
17
|
+
if (isNewVersion) {
|
|
18
|
+
return {
|
|
19
|
+
userTime: "exec_user_time",
|
|
20
|
+
systemTime: "exec_system_time",
|
|
21
|
+
reads: "exec_reads",
|
|
22
|
+
writes: "exec_writes",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
userTime: "user_time",
|
|
27
|
+
systemTime: "system_time",
|
|
28
|
+
reads: "reads",
|
|
29
|
+
writes: "writes",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createKcacheResource(adapter) {
|
|
33
|
+
return {
|
|
34
|
+
uri: "postgres://kcache",
|
|
35
|
+
name: "pg_stat_kcache Status",
|
|
36
|
+
description: "pg_stat_kcache OS-level CPU and I/O performance metrics summary",
|
|
37
|
+
mimeType: "application/json",
|
|
38
|
+
annotations: LOW_PRIORITY,
|
|
39
|
+
handler: async () => {
|
|
40
|
+
const result = {
|
|
41
|
+
extensionInstalled: false,
|
|
42
|
+
extensionVersion: null,
|
|
43
|
+
pgStatStatementsInstalled: false,
|
|
44
|
+
summary: {
|
|
45
|
+
totalQueries: 0,
|
|
46
|
+
totalCpuTime: 0,
|
|
47
|
+
totalReads: 0,
|
|
48
|
+
totalWrites: 0,
|
|
49
|
+
},
|
|
50
|
+
topCpuQueries: [],
|
|
51
|
+
topIoQueries: [],
|
|
52
|
+
resourceClassification: {
|
|
53
|
+
cpuBound: 0,
|
|
54
|
+
ioBound: 0,
|
|
55
|
+
balanced: 0,
|
|
56
|
+
},
|
|
57
|
+
recommendations: [],
|
|
58
|
+
};
|
|
59
|
+
// Check for pg_stat_statements first (required) - outside try-catch for correct error messaging
|
|
60
|
+
const stmtCheck = await adapter.executeQuery(`SELECT extversion FROM pg_extension WHERE extname = 'pg_stat_statements'`);
|
|
61
|
+
result.pgStatStatementsInstalled = (stmtCheck.rows?.length ?? 0) > 0;
|
|
62
|
+
// Check if pg_stat_kcache is installed
|
|
63
|
+
const extCheck = await adapter.executeQuery(`SELECT extversion FROM pg_extension WHERE extname = 'pg_stat_kcache'`);
|
|
64
|
+
if (!extCheck.rows || extCheck.rows.length === 0) {
|
|
65
|
+
result.recommendations.push("pg_stat_kcache extension is not installed. Use pg_kcache_create_extension to enable OS-level performance monitoring.");
|
|
66
|
+
if (!result.pgStatStatementsInstalled) {
|
|
67
|
+
result.recommendations.push("pg_stat_statements is also required and not installed.");
|
|
68
|
+
}
|
|
69
|
+
return JSON.stringify(result, null, 2);
|
|
70
|
+
}
|
|
71
|
+
result.extensionInstalled = true;
|
|
72
|
+
const extVersion = extCheck.rows[0]?.["extversion"];
|
|
73
|
+
result.extensionVersion =
|
|
74
|
+
typeof extVersion === "string" ? extVersion : null;
|
|
75
|
+
if (!result.pgStatStatementsInstalled) {
|
|
76
|
+
result.recommendations.push("pg_stat_statements is required but not installed. pg_stat_kcache will not function properly.");
|
|
77
|
+
return JSON.stringify(result, null, 2);
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// Get version-aware column names
|
|
81
|
+
const cols = await getKcacheColumnNames(adapter);
|
|
82
|
+
// Get summary statistics using the FUNCTION (not the VIEW)
|
|
83
|
+
const summaryResult = await adapter.executeQuery(`SELECT
|
|
84
|
+
COUNT(*)::int as total_queries,
|
|
85
|
+
COALESCE(SUM(${cols.userTime} + ${cols.systemTime}), 0)::float as total_cpu,
|
|
86
|
+
COALESCE(SUM(${cols.reads}), 0)::bigint as total_reads,
|
|
87
|
+
COALESCE(SUM(${cols.writes}), 0)::bigint as total_writes
|
|
88
|
+
FROM pg_stat_kcache()`);
|
|
89
|
+
if (summaryResult.rows && summaryResult.rows.length > 0) {
|
|
90
|
+
const row = summaryResult.rows[0];
|
|
91
|
+
result.summary.totalQueries = Number(row?.["total_queries"] ?? 0);
|
|
92
|
+
result.summary.totalCpuTime = Number(row?.["total_cpu"] ?? 0);
|
|
93
|
+
result.summary.totalReads = Number(row?.["total_reads"] ?? 0);
|
|
94
|
+
result.summary.totalWrites = Number(row?.["total_writes"] ?? 0);
|
|
95
|
+
}
|
|
96
|
+
// Get top CPU-consuming queries using FUNCTION
|
|
97
|
+
const cpuResult = await adapter.executeQuery(`SELECT
|
|
98
|
+
substring(s.query, 1, 100) as query,
|
|
99
|
+
s.calls::int,
|
|
100
|
+
round((k.${cols.userTime} + k.${cols.systemTime})::numeric, 3) as cpu_time,
|
|
101
|
+
round(((k.${cols.userTime} + k.${cols.systemTime}) / NULLIF(s.calls, 0))::numeric, 6) as cpu_per_call
|
|
102
|
+
FROM pg_stat_kcache() k
|
|
103
|
+
JOIN pg_stat_statements s ON k.queryid = s.queryid AND k.dbid = s.dbid AND k.userid = s.userid
|
|
104
|
+
WHERE s.calls > 0
|
|
105
|
+
ORDER BY (k.${cols.userTime} + k.${cols.systemTime}) DESC
|
|
106
|
+
LIMIT 5`);
|
|
107
|
+
if (cpuResult.rows) {
|
|
108
|
+
for (const row of cpuResult.rows) {
|
|
109
|
+
result.topCpuQueries.push({
|
|
110
|
+
queryPreview: toStr(row["query"]),
|
|
111
|
+
calls: Number(row["calls"] ?? 0),
|
|
112
|
+
cpuTimeSeconds: Number(row["cpu_time"] ?? 0),
|
|
113
|
+
cpuPerCall: Number(row["cpu_per_call"] ?? 0),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Get top I/O-consuming queries using FUNCTION
|
|
118
|
+
const ioResult = await adapter.executeQuery(`SELECT
|
|
119
|
+
substring(s.query, 1, 100) as query,
|
|
120
|
+
s.calls::int,
|
|
121
|
+
k.${cols.reads}::bigint as reads,
|
|
122
|
+
k.${cols.writes}::bigint as writes
|
|
123
|
+
FROM pg_stat_kcache() k
|
|
124
|
+
JOIN pg_stat_statements s ON k.queryid = s.queryid AND k.dbid = s.dbid AND k.userid = s.userid
|
|
125
|
+
WHERE s.calls > 0
|
|
126
|
+
ORDER BY k.${cols.reads} DESC
|
|
127
|
+
LIMIT 5`);
|
|
128
|
+
if (ioResult.rows) {
|
|
129
|
+
for (const row of ioResult.rows) {
|
|
130
|
+
result.topIoQueries.push({
|
|
131
|
+
queryPreview: toStr(row["query"]),
|
|
132
|
+
calls: Number(row["calls"] ?? 0),
|
|
133
|
+
readsBytes: Number(row["reads"] ?? 0),
|
|
134
|
+
writesBytes: Number(row["writes"] ?? 0),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Resource classification using FUNCTION
|
|
139
|
+
const classResult = await adapter.executeQuery(`WITH metrics AS (
|
|
140
|
+
SELECT
|
|
141
|
+
queryid,
|
|
142
|
+
(${cols.userTime} + ${cols.systemTime}) as cpu_time,
|
|
143
|
+
${cols.reads} + ${cols.writes} as io_bytes
|
|
144
|
+
FROM pg_stat_kcache()
|
|
145
|
+
WHERE ${cols.userTime} + ${cols.systemTime} > 0 OR ${cols.reads} + ${cols.writes} > 0
|
|
146
|
+
)
|
|
147
|
+
SELECT
|
|
148
|
+
CASE
|
|
149
|
+
WHEN cpu_time > io_bytes / 1000000.0 * 2 THEN 'cpu_bound'
|
|
150
|
+
WHEN io_bytes / 1000000.0 > cpu_time * 2 THEN 'io_bound'
|
|
151
|
+
ELSE 'balanced'
|
|
152
|
+
END as classification,
|
|
153
|
+
COUNT(*)::int as count
|
|
154
|
+
FROM metrics
|
|
155
|
+
GROUP BY 1`);
|
|
156
|
+
if (classResult.rows) {
|
|
157
|
+
for (const row of classResult.rows) {
|
|
158
|
+
const classification = toStr(row["classification"]);
|
|
159
|
+
const count = Number(row["count"] ?? 0);
|
|
160
|
+
if (classification === "cpu_bound") {
|
|
161
|
+
result.resourceClassification.cpuBound = count;
|
|
162
|
+
}
|
|
163
|
+
else if (classification === "io_bound") {
|
|
164
|
+
result.resourceClassification.ioBound = count;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
result.resourceClassification.balanced = count;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Generate recommendations
|
|
172
|
+
if (result.summary.totalQueries === 0) {
|
|
173
|
+
result.recommendations.push("No query statistics collected yet. Run some queries and check again.");
|
|
174
|
+
}
|
|
175
|
+
else if (result.summary.totalReads === 0 &&
|
|
176
|
+
result.summary.totalWrites === 0 &&
|
|
177
|
+
result.summary.totalCpuTime === 0) {
|
|
178
|
+
result.recommendations.push("All pg_stat_kcache metrics are zero. Possible causes: (1) No query activity since last reset, (2) pg_stat_kcache not in shared_preload_libraries (requires server restart), (3) Stats recently reset with pg_stat_kcache_reset(). Check postgresql.conf for: shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'");
|
|
179
|
+
}
|
|
180
|
+
// Generate recommendations based on workload classification
|
|
181
|
+
// Only provide classification recommendations when there's meaningful activity
|
|
182
|
+
const totalClassified = result.resourceClassification.cpuBound +
|
|
183
|
+
result.resourceClassification.ioBound +
|
|
184
|
+
result.resourceClassification.balanced;
|
|
185
|
+
const hasSignificantActivity = totalClassified >= 5 && result.summary.totalCpuTime >= 0.1;
|
|
186
|
+
if (!hasSignificantActivity && totalClassified > 0) {
|
|
187
|
+
result.recommendations.push("Insufficient query activity for meaningful workload classification. Run more queries to gather accurate metrics.");
|
|
188
|
+
}
|
|
189
|
+
else if (result.resourceClassification.cpuBound >
|
|
190
|
+
result.resourceClassification.ioBound * 2) {
|
|
191
|
+
result.recommendations.push("Workload is heavily CPU-bound. Consider optimizing complex calculations or using materialized views.");
|
|
192
|
+
}
|
|
193
|
+
if (hasSignificantActivity &&
|
|
194
|
+
result.resourceClassification.ioBound >
|
|
195
|
+
result.resourceClassification.cpuBound * 2) {
|
|
196
|
+
result.recommendations.push("Workload is heavily I/O-bound. Review indexes and consider increasing shared_buffers.");
|
|
197
|
+
}
|
|
198
|
+
if (result.topCpuQueries.length > 0 &&
|
|
199
|
+
result.topCpuQueries[0] !== undefined &&
|
|
200
|
+
result.topCpuQueries[0].cpuTimeSeconds > 100) {
|
|
201
|
+
result.recommendations.push("Some queries have very high CPU time. Use pg_kcache_top_cpu for detailed analysis.");
|
|
202
|
+
}
|
|
203
|
+
// Add classification thresholds explanation
|
|
204
|
+
result.classificationThresholds = {
|
|
205
|
+
formula: "Compares (user_time + system_time) vs (reads + writes in MB). cpu_time > io_MB * 2 = CPU-bound; io_MB > cpu_time * 2 = I/O-bound; else balanced.",
|
|
206
|
+
cpuBound: "Query spends 2x more time on CPU than on I/O operations. Optimize calculations, use materialized views, or simplify queries.",
|
|
207
|
+
ioBound: "Query spends 2x more time on I/O than CPU. Add indexes, increase shared_buffers, or optimize disk access patterns.",
|
|
208
|
+
balanced: "Query has relatively equal CPU and I/O usage. Standard optimization techniques apply.",
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Extension is installed but data queries failed
|
|
213
|
+
result.recommendations.push("Error querying pg_stat_kcache data. Check permissions on pg_stat_kcache() function.");
|
|
214
|
+
}
|
|
215
|
+
return JSON.stringify(result, null, 2);
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=kcache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kcache.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/kcache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locks Resource
|
|
3
|
+
*
|
|
4
|
+
* Lock contention detection and blocking query identification.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createLocksResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=locks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/locks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAyBjC,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA8FpB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locks Resource
|
|
3
|
+
*
|
|
4
|
+
* Lock contention detection and blocking query identification.
|
|
5
|
+
*/
|
|
6
|
+
import { MEDIUM_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createLocksResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://locks",
|
|
10
|
+
name: "Lock Information",
|
|
11
|
+
description: "Current lock information with contention detection",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: MEDIUM_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
// Get lock information
|
|
16
|
+
const locksResult = await adapter.executeQuery(`
|
|
17
|
+
SELECT
|
|
18
|
+
l.locktype,
|
|
19
|
+
l.mode,
|
|
20
|
+
l.granted,
|
|
21
|
+
l.pid,
|
|
22
|
+
a.usename,
|
|
23
|
+
a.application_name,
|
|
24
|
+
a.client_addr::text as client_addr,
|
|
25
|
+
a.state,
|
|
26
|
+
a.wait_event_type,
|
|
27
|
+
a.wait_event,
|
|
28
|
+
COALESCE(r.relname, l.relation::text) as relation,
|
|
29
|
+
LEFT(a.query, 100) as query_preview,
|
|
30
|
+
EXTRACT(EPOCH FROM age(now(), a.query_start)) as query_duration_seconds
|
|
31
|
+
FROM pg_locks l
|
|
32
|
+
LEFT JOIN pg_stat_activity a ON l.pid = a.pid
|
|
33
|
+
LEFT JOIN pg_class r ON l.relation = r.oid
|
|
34
|
+
WHERE l.pid != pg_backend_pid()
|
|
35
|
+
ORDER BY l.granted, a.query_start NULLS LAST
|
|
36
|
+
LIMIT 50
|
|
37
|
+
`);
|
|
38
|
+
const locks = (locksResult.rows ?? []);
|
|
39
|
+
// Get active session count for context
|
|
40
|
+
const sessionResult = await adapter.executeQuery(`
|
|
41
|
+
SELECT COUNT(*) as count FROM pg_stat_activity
|
|
42
|
+
WHERE pid != pg_backend_pid()
|
|
43
|
+
AND state = 'active'
|
|
44
|
+
`);
|
|
45
|
+
const activeSessions = Number(sessionResult.rows?.[0]?.["count"] ?? 0);
|
|
46
|
+
// Analyze locks
|
|
47
|
+
const blockingLocks = locks.filter((lock) => !lock.granted);
|
|
48
|
+
const activeLocks = locks.filter((lock) => lock.granted);
|
|
49
|
+
// Generate warnings
|
|
50
|
+
const warnings = [];
|
|
51
|
+
if (blockingLocks.length > 0) {
|
|
52
|
+
warnings.push({
|
|
53
|
+
severity: "HIGH",
|
|
54
|
+
message: blockingLocks.length.toString() + " blocked queries detected",
|
|
55
|
+
recommendation: "Review blocking queries and consider terminating long-running transactions",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (locks.length > 100) {
|
|
59
|
+
warnings.push({
|
|
60
|
+
severity: "MEDIUM",
|
|
61
|
+
message: "High number of locks (" +
|
|
62
|
+
locks.length.toString() +
|
|
63
|
+
") - showing top 50",
|
|
64
|
+
recommendation: "May indicate lock contention or long-running transactions",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (warnings.length === 0) {
|
|
68
|
+
warnings.push({
|
|
69
|
+
severity: "INFO",
|
|
70
|
+
message: "No lock contention detected",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// Generate summary message
|
|
74
|
+
const summary = locks.length === 0
|
|
75
|
+
? `No locks detected. ${String(activeSessions)} active sessions. Empty result is normal when queries complete quickly.`
|
|
76
|
+
: `${String(locks.length)} locks held by ${String(new Set(locks.map((l) => l.pid)).size)} processes. ${String(activeSessions)} active sessions.`;
|
|
77
|
+
return {
|
|
78
|
+
totalLocks: locks.length,
|
|
79
|
+
activeLocks: activeLocks.length,
|
|
80
|
+
blockingLocks: blockingLocks.length,
|
|
81
|
+
activeSessions,
|
|
82
|
+
lockDetails: locks,
|
|
83
|
+
warnings,
|
|
84
|
+
summary,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=locks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/locks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAwBxE,MAAM,UAAU,mBAAmB,CACjC,OAAwB;IAExB,OAAO;QACL,GAAG,EAAE,kBAAkB;QACvB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,QAAwB,EAAE,EAAE;YACxD,uBAAuB;YACvB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;aAqBxC,CAAC,CAAC;YACT,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAyB,CAAC;YAE/D,uCAAuC;YACvC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;;;;aAI1C,CAAC,CAAC;YACT,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAEvE,gBAAgB;YAChB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAElE,oBAAoB;YACpB,MAAM,QAAQ,GAAkB,EAAE,CAAC;YAEnC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,MAAM;oBAChB,OAAO,EACL,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,2BAA2B;oBAC/D,cAAc,EACZ,4EAA4E;iBAC/E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EACL,wBAAwB;wBACxB,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;wBACvB,oBAAoB;oBACtB,cAAc,EACZ,2DAA2D;iBAC9D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACL,CAAC;YAED,2BAA2B;YAC3B,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,KAAK,CAAC;gBAChB,CAAC,CAAC,sBAAsB,MAAM,CAAC,cAAc,CAAC,yEAAyE;gBACvH,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;YAErJ,OAAO;gBACL,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,WAAW,EAAE,WAAW,CAAC,MAAM;gBAC/B,aAAa,EAAE,aAAa,CAAC,MAAM;gBACnC,cAAc;gBACd,WAAW,EAAE,KAAK;gBAClB,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg_partman Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides pg_partman partition set status, configuration, and health.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createPartmanResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=partman.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partman.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/partman.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA0ClE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA6LpB"}
|