@neverinfamous/postgres-mcp 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +119 -46
  3. package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
  4. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
  5. package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
  6. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
  7. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
  8. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
  9. package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
  10. package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
  11. package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
  12. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
  13. package/dist/__tests__/benchmarks/schema-parsing.bench.js +5 -5
  14. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
  15. package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
  16. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +2 -1
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/adapters/DatabaseAdapter.d.ts +6 -5
  21. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  22. package/dist/adapters/DatabaseAdapter.js +11 -20
  23. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  24. package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -26
  25. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  26. package/dist/adapters/postgresql/PostgresAdapter.js +31 -526
  27. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  28. package/dist/adapters/postgresql/prompts/index.js +1 -1
  29. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  30. package/dist/adapters/postgresql/resources/index.d.ts +1 -1
  31. package/dist/adapters/postgresql/resources/index.js +3 -3
  32. package/dist/adapters/postgresql/resources/index.js.map +1 -1
  33. package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
  34. package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
  35. package/dist/adapters/postgresql/schema-operations.js +561 -0
  36. package/dist/adapters/postgresql/schema-operations.js.map +1 -0
  37. package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
  38. package/dist/adapters/postgresql/schemas/admin.js +4 -4
  39. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  40. package/dist/adapters/postgresql/schemas/backup.d.ts +2 -2
  41. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/schemas/backup.js +1 -3
  43. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  44. package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
  45. package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
  46. package/dist/adapters/postgresql/schemas/core/index.js +6 -0
  47. package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
  48. package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +16 -171
  49. package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
  50. package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
  51. package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
  52. package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
  53. package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
  54. package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
  55. package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
  56. package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
  57. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.js +38 -10
  59. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  60. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
  61. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
  62. package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
  63. package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
  64. package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
  65. package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
  66. package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
  67. package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
  68. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
  69. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
  70. package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
  71. package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
  72. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
  73. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
  74. package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
  75. package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
  76. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
  77. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
  78. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
  79. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
  80. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
  81. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
  82. package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
  83. package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
  84. package/dist/adapters/postgresql/schemas/index.d.ts +6 -6
  85. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  86. package/dist/adapters/postgresql/schemas/index.js +8 -8
  87. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  88. package/dist/adapters/postgresql/schemas/introspection.d.ts +19 -42
  89. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/schemas/introspection.js +72 -27
  91. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
  92. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
  93. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
  94. package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
  95. package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
  96. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
  97. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
  98. package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
  99. package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
  100. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
  101. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
  102. package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
  103. package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
  104. package/dist/adapters/postgresql/schemas/monitoring.d.ts +4 -4
  105. package/dist/adapters/postgresql/schemas/monitoring.js +2 -2
  106. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  107. package/dist/adapters/postgresql/schemas/partitioning.d.ts +14 -14
  108. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/schemas/partitioning.js +64 -46
  110. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  111. package/dist/adapters/postgresql/schemas/partman.d.ts +16 -14
  112. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  113. package/dist/adapters/postgresql/schemas/partman.js +9 -9
  114. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  115. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
  116. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
  117. package/dist/adapters/postgresql/schemas/postgis/advanced.js +495 -0
  118. package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
  119. package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
  120. package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
  121. package/dist/adapters/postgresql/schemas/{postgis.js → postgis/basic.js} +1 -486
  122. package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
  123. package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
  124. package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
  125. package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
  126. package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
  127. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -25
  128. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  129. package/dist/adapters/postgresql/schemas/schema-mgmt.js +57 -19
  130. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  131. package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
  132. package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
  133. package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
  134. package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
  135. package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
  136. package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
  137. package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
  138. package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
  139. package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
  140. package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
  141. package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
  142. package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
  143. package/dist/adapters/postgresql/schemas/text-search.d.ts +18 -18
  144. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/schemas/text-search.js +12 -27
  146. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  147. package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
  148. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  149. package/dist/adapters/postgresql/schemas/vector.js +9 -15
  150. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  151. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  152. package/dist/adapters/postgresql/tools/backup/dump.js +95 -76
  153. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  154. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  155. package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
  156. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  157. package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
  158. package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
  159. package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +50 -232
  160. package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
  161. package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
  162. package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
  163. package/dist/adapters/postgresql/tools/citext/index.js +23 -0
  164. package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
  165. package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
  166. package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
  167. package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
  168. package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
  169. package/dist/adapters/postgresql/tools/codemode/index.js +1 -1
  170. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
  172. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  173. package/dist/adapters/postgresql/tools/core/convenience.js +100 -210
  174. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  175. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
  176. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
  177. package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
  178. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
  179. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  180. package/dist/adapters/postgresql/tools/core/health.js +124 -114
  181. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  182. package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
  183. package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/core/index.js +3 -2
  185. package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/core/indexes.js +151 -127
  188. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/core/objects.js +186 -161
  191. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/core/query.js +37 -25
  194. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
  196. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  197. package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
  198. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  199. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  200. package/dist/adapters/postgresql/tools/core/tables.js +156 -129
  201. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  202. package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
  203. package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
  204. package/dist/adapters/postgresql/tools/core/utility.js +174 -0
  205. package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
  206. package/dist/adapters/postgresql/tools/cron.js +90 -43
  207. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  208. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
  209. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
  210. package/dist/adapters/postgresql/tools/introspection/analysis.js +605 -0
  211. package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
  212. package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
  213. package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
  214. package/dist/adapters/postgresql/tools/introspection/graph.js +621 -0
  215. package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
  216. package/dist/adapters/postgresql/tools/introspection/index.d.ts +21 -0
  217. package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
  218. package/dist/adapters/postgresql/tools/introspection/index.js +31 -0
  219. package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
  220. package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
  221. package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
  222. package/dist/adapters/postgresql/tools/introspection/migration.js +575 -0
  223. package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
  224. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
  225. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
  226. package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
  227. package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
  228. package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
  229. package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
  230. package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
  231. package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
  232. package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
  233. package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
  234. package/dist/adapters/postgresql/tools/jsonb/{basic.js → read.js} +41 -482
  235. package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
  236. package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
  237. package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
  238. package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +26 -357
  239. package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
  240. package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
  241. package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
  242. package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
  243. package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
  244. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  245. package/dist/adapters/postgresql/tools/kcache.js +116 -51
  246. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  247. package/dist/adapters/postgresql/tools/ltree.js +346 -260
  248. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  249. package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
  250. package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
  251. package/dist/adapters/postgresql/tools/migration/index.js +23 -0
  252. package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
  253. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
  254. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
  255. package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +24 -359
  256. package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
  257. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
  258. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
  259. package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
  260. package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
  261. package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
  262. package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
  263. package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
  264. package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
  265. package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
  266. package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
  267. package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
  268. package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
  269. package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
  270. package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
  271. package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
  272. package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
  273. package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
  274. package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
  275. package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
  276. package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
  277. package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
  278. package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
  279. package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
  280. package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
  281. package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
  282. package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
  283. package/dist/adapters/postgresql/tools/partman/index.js +4 -2
  284. package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
  285. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
  286. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
  287. package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
  288. package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
  289. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  290. package/dist/adapters/postgresql/tools/partman/management.js +438 -383
  291. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  292. package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
  293. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  294. package/dist/adapters/postgresql/tools/partman/operations.js +171 -652
  295. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  296. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  297. package/dist/adapters/postgresql/tools/performance/analysis.js +69 -42
  298. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  299. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
  300. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
  301. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
  302. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
  303. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
  304. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
  305. package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
  306. package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
  307. package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
  308. package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
  309. package/dist/adapters/postgresql/tools/performance/index.js +7 -1
  310. package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
  311. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  312. package/dist/adapters/postgresql/tools/performance/monitoring.js +80 -55
  313. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  314. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  315. package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
  316. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  317. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  318. package/dist/adapters/postgresql/tools/performance/stats.js +439 -318
  319. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  320. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  321. package/dist/adapters/postgresql/tools/pgcrypto.js +45 -77
  322. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  323. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  324. package/dist/adapters/postgresql/tools/postgis/basic.js +121 -93
  325. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  326. package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
  327. package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
  328. package/dist/adapters/postgresql/tools/schema/index.js +32 -0
  329. package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
  330. package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
  331. package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
  332. package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
  333. package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
  334. package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
  335. package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
  336. package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +64 -386
  337. package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
  338. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  339. package/dist/adapters/postgresql/tools/stats/advanced.js +1 -218
  340. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  341. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
  342. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
  343. package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
  344. package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
  345. package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
  346. package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
  347. package/dist/adapters/postgresql/tools/text/index.js +33 -0
  348. package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
  349. package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
  350. package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
  351. package/dist/adapters/postgresql/tools/text/matching.js +565 -0
  352. package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
  353. package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
  354. package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
  355. package/dist/adapters/postgresql/tools/text/search.js +653 -0
  356. package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
  357. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  358. package/dist/adapters/postgresql/tools/transactions.js +11 -27
  359. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  360. package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
  361. package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
  362. package/dist/adapters/postgresql/tools/vector/data.js +540 -0
  363. package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
  364. package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
  365. package/dist/adapters/postgresql/tools/vector/index.js +6 -2
  366. package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
  367. package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
  368. package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
  369. package/dist/adapters/postgresql/tools/vector/management.js +425 -0
  370. package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
  371. package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
  372. package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
  373. package/dist/adapters/postgresql/tools/vector/query.js +767 -0
  374. package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
  375. package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
  376. package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
  377. package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
  378. package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
  379. package/dist/auth/scopes.d.ts.map +1 -1
  380. package/dist/auth/scopes.js +3 -1
  381. package/dist/auth/scopes.js.map +1 -1
  382. package/dist/cli/args.d.ts +3 -2
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js +4 -3
  385. package/dist/cli/args.js.map +1 -1
  386. package/dist/cli.js +16 -4
  387. package/dist/cli.js.map +1 -1
  388. package/dist/codemode/api/aliases.d.ts +14 -0
  389. package/dist/codemode/api/aliases.d.ts.map +1 -0
  390. package/dist/codemode/api/aliases.js +503 -0
  391. package/dist/codemode/api/aliases.js.map +1 -0
  392. package/dist/codemode/api/group-api.d.ts +23 -0
  393. package/dist/codemode/api/group-api.d.ts.map +1 -0
  394. package/dist/codemode/api/group-api.js +179 -0
  395. package/dist/codemode/api/group-api.js.map +1 -0
  396. package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
  397. package/dist/codemode/api/index.d.ts.map +1 -0
  398. package/dist/codemode/api/index.js +195 -0
  399. package/dist/codemode/api/index.js.map +1 -0
  400. package/dist/codemode/api/maps.d.ts +47 -0
  401. package/dist/codemode/api/maps.d.ts.map +1 -0
  402. package/dist/codemode/api/maps.js +529 -0
  403. package/dist/codemode/api/maps.js.map +1 -0
  404. package/dist/codemode/api/normalize.d.ts +13 -0
  405. package/dist/codemode/api/normalize.d.ts.map +1 -0
  406. package/dist/codemode/api/normalize.js +120 -0
  407. package/dist/codemode/api/normalize.js.map +1 -0
  408. package/dist/codemode/index.d.ts +1 -1
  409. package/dist/codemode/index.d.ts.map +1 -1
  410. package/dist/codemode/index.js +1 -1
  411. package/dist/codemode/index.js.map +1 -1
  412. package/dist/codemode/sandbox.d.ts.map +1 -1
  413. package/dist/codemode/sandbox.js +8 -25
  414. package/dist/codemode/sandbox.js.map +1 -1
  415. package/dist/filtering/ToolConstants.d.ts +11 -11
  416. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  417. package/dist/filtering/ToolConstants.js +28 -15
  418. package/dist/filtering/ToolConstants.js.map +1 -1
  419. package/dist/filtering/ToolFilter.d.ts +0 -32
  420. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  421. package/dist/filtering/ToolFilter.js +0 -43
  422. package/dist/filtering/ToolFilter.js.map +1 -1
  423. package/dist/server/McpServer.d.ts +1 -1
  424. package/dist/server/McpServer.d.ts.map +1 -1
  425. package/dist/server/McpServer.js +1 -2
  426. package/dist/server/McpServer.js.map +1 -1
  427. package/dist/transports/http.d.ts +55 -10
  428. package/dist/transports/http.d.ts.map +1 -1
  429. package/dist/transports/http.js +301 -50
  430. package/dist/transports/http.js.map +1 -1
  431. package/dist/types/filtering.d.ts +1 -1
  432. package/dist/types/filtering.d.ts.map +1 -1
  433. package/dist/types/index.d.ts +2 -2
  434. package/dist/types/index.d.ts.map +1 -1
  435. package/dist/types/index.js.map +1 -1
  436. package/dist/types/mcp.d.ts +0 -21
  437. package/dist/types/mcp.d.ts.map +1 -1
  438. package/dist/types/schema.d.ts +0 -79
  439. package/dist/types/schema.d.ts.map +1 -1
  440. package/dist/utils/fts-config.d.ts +0 -6
  441. package/dist/utils/fts-config.d.ts.map +1 -1
  442. package/dist/utils/fts-config.js +1 -1
  443. package/dist/utils/fts-config.js.map +1 -1
  444. package/dist/utils/icons.d.ts.map +1 -1
  445. package/dist/utils/icons.js +5 -0
  446. package/dist/utils/icons.js.map +1 -1
  447. package/dist/utils/identifiers.d.ts.map +1 -1
  448. package/dist/utils/identifiers.js +6 -6
  449. package/dist/utils/identifiers.js.map +1 -1
  450. package/dist/utils/logger.d.ts +6 -6
  451. package/dist/utils/logger.d.ts.map +1 -1
  452. package/dist/utils/logger.js +18 -15
  453. package/dist/utils/logger.js.map +1 -1
  454. package/dist/utils/progress-utils.d.ts +3 -14
  455. package/dist/utils/progress-utils.d.ts.map +1 -1
  456. package/dist/utils/progress-utils.js +2 -21
  457. package/dist/utils/progress-utils.js.map +1 -1
  458. package/dist/utils/version.d.ts +9 -0
  459. package/dist/utils/version.d.ts.map +1 -0
  460. package/dist/utils/version.js +12 -0
  461. package/dist/utils/version.js.map +1 -0
  462. package/dist/utils/where-clause.d.ts +4 -0
  463. package/dist/utils/where-clause.d.ts.map +1 -1
  464. package/dist/utils/where-clause.js +16 -0
  465. package/dist/utils/where-clause.js.map +1 -1
  466. package/package.json +6 -4
  467. package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
  468. package/dist/adapters/postgresql/schemas/core.js.map +0 -1
  469. package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -852
  470. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
  471. package/dist/adapters/postgresql/schemas/extensions.js +0 -1202
  472. package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
  473. package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -541
  474. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
  475. package/dist/adapters/postgresql/schemas/jsonb.js +0 -814
  476. package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
  477. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
  478. package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
  479. package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
  480. package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
  481. package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
  482. package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
  483. package/dist/adapters/postgresql/tools/citext.js.map +0 -1
  484. package/dist/adapters/postgresql/tools/introspection.d.ts +0 -15
  485. package/dist/adapters/postgresql/tools/introspection.d.ts.map +0 -1
  486. package/dist/adapters/postgresql/tools/introspection.js +0 -1682
  487. package/dist/adapters/postgresql/tools/introspection.js.map +0 -1
  488. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
  489. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
  490. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
  491. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
  492. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
  493. package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
  494. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
  495. package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
  496. package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
  497. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
  498. package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
  499. package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
  500. package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
  501. package/dist/adapters/postgresql/tools/schema.js.map +0 -1
  502. package/dist/adapters/postgresql/tools/text.d.ts +0 -13
  503. package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
  504. package/dist/adapters/postgresql/tools/text.js +0 -1082
  505. package/dist/adapters/postgresql/tools/text.js.map +0 -1
  506. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
  507. package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
  508. package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
  509. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
  510. package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
  511. package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
  512. package/dist/codemode/api.d.ts.map +0 -1
  513. package/dist/codemode/api.js +0 -1544
  514. package/dist/codemode/api.js.map +0 -1
  515. package/dist/utils/promptGenerator.d.ts +0 -20
  516. package/dist/utils/promptGenerator.d.ts.map +0 -1
  517. package/dist/utils/promptGenerator.js +0 -81
  518. package/dist/utils/promptGenerator.js.map +0 -1
@@ -0,0 +1,605 @@
1
+ /**
2
+ * PostgreSQL Introspection Tools - Schema Analysis
3
+ *
4
+ * Schema snapshot, constraint analysis, and migration risk assessment tools.
5
+ * 3 tools total.
6
+ */
7
+ import { readOnly } from "../../../../utils/annotations.js";
8
+ import { getToolIcons } from "../../../../utils/icons.js";
9
+ import { formatPostgresError } from "../core/error-helpers.js";
10
+ import { parseArrayColumn, qualifiedName } from "./graph.js";
11
+ import { SchemaSnapshotSchemaBase, SchemaSnapshotSchema, ConstraintAnalysisSchemaBase, ConstraintAnalysisSchema, MigrationRisksSchemaBase, MigrationRisksSchema,
12
+ // Output schemas
13
+ SchemaSnapshotOutputSchema, ConstraintAnalysisOutputSchema, MigrationRisksOutputSchema, } from "../../schemas/index.js";
14
+ // =============================================================================
15
+ // pg_schema_snapshot
16
+ // =============================================================================
17
+ export function createSchemaSnapshotTool(adapter) {
18
+ return {
19
+ name: "pg_schema_snapshot",
20
+ description: "Get a complete schema snapshot in a single agent-optimized JSON structure. Includes tables, columns, types, constraints, indexes, triggers, sequences, and extensions.",
21
+ group: "introspection",
22
+ inputSchema: SchemaSnapshotSchemaBase,
23
+ outputSchema: SchemaSnapshotOutputSchema,
24
+ annotations: readOnly("Schema Snapshot"),
25
+ icons: getToolIcons("introspection", readOnly("Schema Snapshot")),
26
+ handler: async (params, _context) => {
27
+ try {
28
+ const parsed = SchemaSnapshotSchema.parse(params);
29
+ const includeAll = !parsed.sections || parsed.sections.length === 0;
30
+ const sections = new Set(parsed.sections ?? []);
31
+ const snapshot = {};
32
+ const stats = {
33
+ tables: 0,
34
+ views: 0,
35
+ indexes: 0,
36
+ constraints: 0,
37
+ functions: 0,
38
+ triggers: 0,
39
+ sequences: 0,
40
+ customTypes: 0,
41
+ extensions: 0,
42
+ };
43
+ const schemaExclude = parsed.includeSystem
44
+ ? ""
45
+ : "AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast'";
46
+ const extensionSchemaExclude = !parsed.schema &&
47
+ !parsed.includeSystem &&
48
+ parsed.excludeExtensionSchemas !== false
49
+ ? "AND n.nspname NOT IN ('cron', 'topology', 'tiger', 'tiger_data')"
50
+ : "";
51
+ // Exclude extension-owned objects (e.g. spatial_ref_sys, part_config) from public schema
52
+ const extOwnedActive = !parsed.includeSystem && parsed.excludeExtensionSchemas !== false;
53
+ const extOwnedClause = (oidExpr) => extOwnedActive
54
+ ? `AND NOT EXISTS (SELECT 1 FROM pg_depend dep WHERE dep.objid = ${oidExpr} AND dep.deptype = 'e')`
55
+ : "";
56
+ const schemaParams = [];
57
+ let schemaWhere = "";
58
+ if (parsed.schema) {
59
+ schemaParams.push(parsed.schema);
60
+ schemaWhere = `AND n.nspname = $${String(schemaParams.length)}`;
61
+ }
62
+ // Build columns subquery for tables section
63
+ const columnsSubquery = parsed.compact
64
+ ? ""
65
+ : `,
66
+ (SELECT json_agg(json_build_object(
67
+ 'name', a.attname,
68
+ 'type', pg_catalog.format_type(a.atttypid, a.atttypmod),
69
+ 'nullable', NOT a.attnotnull,
70
+ 'default', pg_get_expr(d.adbin, d.adrelid),
71
+ 'primaryKey', COALESCE((SELECT true FROM pg_constraint pk
72
+ WHERE pk.conrelid = a.attrelid AND a.attnum = ANY(pk.conkey)
73
+ AND pk.contype = 'p'), false)
74
+ ) ORDER BY a.attnum)
75
+ FROM pg_attribute a
76
+ LEFT JOIN pg_attrdef d ON (a.attrelid, a.attnum) = (d.adrelid, d.adnum)
77
+ WHERE a.attrelid = c.oid AND a.attnum > 0 AND NOT a.attisdropped
78
+ ) AS columns`;
79
+ const qp = schemaParams.length > 0 ? schemaParams : undefined;
80
+ // Execute all independent section queries in parallel (PERF-P2)
81
+ const [tablesResult, viewsResult, indexesResult, constraintsResult, functionsResult, triggersResult, seqResult, typesResult, extResult,] = await Promise.all([
82
+ // Tables + columns (or compact mode without columns)
83
+ includeAll || sections.has("tables")
84
+ ? adapter.executeQuery(`SELECT
85
+ n.nspname AS schema, c.relname AS name,
86
+ CASE c.relkind WHEN 'r' THEN 'table' WHEN 'p' THEN 'partitioned_table' END AS type,
87
+ CASE WHEN c.reltuples = -1 THEN COALESCE(s.n_live_tup, 0) ELSE c.reltuples END::bigint AS row_count,
88
+ pg_table_size(c.oid) AS size_bytes,
89
+ obj_description(c.oid, 'pg_class') AS comment${columnsSubquery}
90
+ FROM pg_class c
91
+ JOIN pg_namespace n ON n.oid = c.relnamespace
92
+ LEFT JOIN pg_stat_user_tables s ON s.relid = c.oid
93
+ WHERE c.relkind IN ('r', 'p')
94
+ ${schemaExclude} ${extensionSchemaExclude} ${extOwnedClause("c.oid")} ${schemaWhere}
95
+ ORDER BY n.nspname, c.relname`, qp)
96
+ : null,
97
+ // Views
98
+ includeAll || sections.has("views")
99
+ ? adapter.executeQuery(`SELECT
100
+ n.nspname AS schema, c.relname AS name,
101
+ CASE c.relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized_view' END AS type,
102
+ pg_get_viewdef(c.oid, true) AS definition
103
+ FROM pg_class c
104
+ JOIN pg_namespace n ON n.oid = c.relnamespace
105
+ WHERE c.relkind IN ('v', 'm')
106
+ ${schemaExclude} ${extensionSchemaExclude} ${extOwnedClause("c.oid")} ${schemaWhere}
107
+ ORDER BY n.nspname, c.relname`, qp)
108
+ : null,
109
+ // Indexes
110
+ includeAll || sections.has("indexes")
111
+ ? adapter.executeQuery(`SELECT
112
+ i.relname AS name, t.relname AS table_name, n.nspname AS schema,
113
+ am.amname AS type, ix.indisunique AS is_unique,
114
+ pg_get_indexdef(ix.indexrelid) AS definition,
115
+ pg_relation_size(i.oid) AS size_bytes
116
+ FROM pg_index ix
117
+ JOIN pg_class t ON t.oid = ix.indrelid
118
+ JOIN pg_class i ON i.oid = ix.indexrelid
119
+ JOIN pg_namespace n ON n.oid = t.relnamespace
120
+ JOIN pg_am am ON am.oid = i.relam
121
+ WHERE ${parsed.includeSystem ? "true" : "n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast'"}
122
+ ${extensionSchemaExclude} ${extOwnedClause("t.oid")} ${schemaWhere}
123
+ ORDER BY n.nspname, t.relname, i.relname`, qp)
124
+ : null,
125
+ // Constraints
126
+ includeAll || sections.has("constraints")
127
+ ? adapter.executeQuery(`SELECT
128
+ c.conname AS name, t.relname AS table_name, n.nspname AS schema,
129
+ CASE c.contype WHEN 'p' THEN 'primary_key' WHEN 'f' THEN 'foreign_key'
130
+ WHEN 'u' THEN 'unique' WHEN 'c' THEN 'check' WHEN 'x' THEN 'exclusion' END AS type,
131
+ pg_get_constraintdef(c.oid) AS definition
132
+ FROM pg_constraint c
133
+ JOIN pg_class t ON t.oid = c.conrelid
134
+ JOIN pg_namespace n ON n.oid = t.relnamespace
135
+ WHERE ${parsed.includeSystem ? "true" : "n.nspname NOT IN ('pg_catalog', 'information_schema')"}
136
+ ${extensionSchemaExclude} ${extOwnedClause("t.oid")} ${schemaWhere}
137
+ ORDER BY n.nspname, t.relname, c.conname`, qp)
138
+ : null,
139
+ // Functions
140
+ includeAll || sections.has("functions")
141
+ ? adapter.executeQuery(`SELECT
142
+ n.nspname AS schema, p.proname AS name,
143
+ pg_get_function_arguments(p.oid) AS arguments,
144
+ pg_get_function_result(p.oid) AS return_type,
145
+ l.lanname AS language, p.provolatile AS volatility
146
+ FROM pg_proc p
147
+ JOIN pg_namespace n ON n.oid = p.pronamespace
148
+ JOIN pg_language l ON l.oid = p.prolang
149
+ WHERE ${parsed.includeSystem ? "true" : "n.nspname NOT IN ('pg_catalog', 'information_schema')"}
150
+ ${extensionSchemaExclude} ${extOwnedClause("p.oid")} ${schemaWhere}
151
+ ORDER BY n.nspname, p.proname`, qp)
152
+ : null,
153
+ // Triggers
154
+ includeAll || sections.has("triggers")
155
+ ? adapter.executeQuery(`SELECT
156
+ t.tgname AS name, c.relname AS table_name, n.nspname AS schema,
157
+ CASE WHEN t.tgtype & 2 = 2 THEN 'BEFORE' WHEN t.tgtype & 64 = 64 THEN 'INSTEAD OF' ELSE 'AFTER' END AS timing,
158
+ array_remove(ARRAY[
159
+ CASE WHEN t.tgtype & 4 = 4 THEN 'INSERT' END,
160
+ CASE WHEN t.tgtype & 8 = 8 THEN 'DELETE' END,
161
+ CASE WHEN t.tgtype & 16 = 16 THEN 'UPDATE' END,
162
+ CASE WHEN t.tgtype & 32 = 32 THEN 'TRUNCATE' END
163
+ ], NULL) AS events,
164
+ p.proname AS function_name
165
+ FROM pg_trigger t
166
+ JOIN pg_class c ON c.oid = t.tgrelid
167
+ JOIN pg_namespace n ON n.oid = c.relnamespace
168
+ JOIN pg_proc p ON p.oid = t.tgfoid
169
+ WHERE NOT t.tgisinternal
170
+ ${schemaExclude} ${extensionSchemaExclude} ${extOwnedClause("c.oid")} ${schemaWhere}
171
+ ORDER BY n.nspname, c.relname, t.tgname`, qp)
172
+ : null,
173
+ // Sequences
174
+ includeAll || sections.has("sequences")
175
+ ? adapter.executeQuery(`SELECT
176
+ n.nspname AS schema, c.relname AS name,
177
+ (SELECT tc.relname || '.' || a.attname
178
+ FROM pg_depend d
179
+ JOIN pg_class tc ON tc.oid = d.refobjid
180
+ JOIN pg_attribute a ON a.attrelid = tc.oid AND a.attnum = d.refobjsubid
181
+ WHERE d.objid = c.oid AND d.classid = 'pg_class'::regclass AND d.deptype = 'a'
182
+ LIMIT 1) AS owned_by
183
+ FROM pg_class c
184
+ JOIN pg_namespace n ON n.oid = c.relnamespace
185
+ WHERE c.relkind = 'S'
186
+ ${schemaExclude} ${extensionSchemaExclude} ${extOwnedClause("c.oid")} ${schemaWhere}
187
+ ORDER BY n.nspname, c.relname`, qp)
188
+ : null,
189
+ // Custom types
190
+ includeAll || sections.has("types")
191
+ ? adapter.executeQuery(`SELECT
192
+ n.nspname AS schema, t.typname AS name,
193
+ CASE t.typtype WHEN 'e' THEN 'enum' WHEN 'c' THEN 'composite' WHEN 'd' THEN 'domain' WHEN 'r' THEN 'range' END AS type,
194
+ CASE WHEN t.typtype = 'e' THEN
195
+ (SELECT json_agg(e.enumlabel ORDER BY e.enumsortorder) FROM pg_enum e WHERE e.enumtypid = t.oid)
196
+ END AS values
197
+ FROM pg_type t
198
+ JOIN pg_namespace n ON n.oid = t.typnamespace
199
+ WHERE t.typtype IN ('e', 'c', 'd', 'r')
200
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
201
+ ${extensionSchemaExclude} ${extOwnedClause("t.oid")} ${schemaWhere}
202
+ ORDER BY n.nspname, t.typname`, qp)
203
+ : null,
204
+ // Extensions (skip when schema filter is active — extensions are global objects)
205
+ (includeAll || sections.has("extensions")) && !parsed.schema
206
+ ? adapter.executeQuery(`SELECT extname AS name, extversion AS version,
207
+ n.nspname AS schema
208
+ FROM pg_extension e
209
+ JOIN pg_namespace n ON n.oid = e.extnamespace
210
+ ORDER BY e.extname`)
211
+ : null,
212
+ ]);
213
+ // Assign results to snapshot and stats
214
+ if (tablesResult !== null) {
215
+ snapshot["tables"] = tablesResult.rows ?? [];
216
+ stats.tables = tablesResult.rows?.length ?? 0;
217
+ }
218
+ if (viewsResult !== null) {
219
+ snapshot["views"] = viewsResult.rows ?? [];
220
+ stats.views = viewsResult.rows?.length ?? 0;
221
+ }
222
+ if (indexesResult !== null) {
223
+ snapshot["indexes"] = indexesResult.rows ?? [];
224
+ stats.indexes = indexesResult.rows?.length ?? 0;
225
+ }
226
+ if (constraintsResult !== null) {
227
+ snapshot["constraints"] = constraintsResult.rows ?? [];
228
+ stats.constraints = constraintsResult.rows?.length ?? 0;
229
+ }
230
+ if (functionsResult !== null) {
231
+ snapshot["functions"] = functionsResult.rows ?? [];
232
+ stats.functions = functionsResult.rows?.length ?? 0;
233
+ }
234
+ if (triggersResult !== null) {
235
+ snapshot["triggers"] = triggersResult.rows ?? [];
236
+ stats.triggers = triggersResult.rows?.length ?? 0;
237
+ }
238
+ if (seqResult !== null) {
239
+ snapshot["sequences"] = seqResult.rows ?? [];
240
+ stats.sequences = seqResult.rows?.length ?? 0;
241
+ }
242
+ if (typesResult !== null) {
243
+ snapshot["types"] = typesResult.rows ?? [];
244
+ stats.customTypes = typesResult.rows?.length ?? 0;
245
+ }
246
+ if (extResult !== null) {
247
+ snapshot["extensions"] = extResult.rows ?? [];
248
+ stats.extensions = extResult.rows?.length ?? 0;
249
+ }
250
+ // Add hint for nonexistent/empty schema
251
+ const allEmpty = Object.values(stats).every((v) => v === 0);
252
+ const hint = parsed.schema !== undefined && allEmpty
253
+ ? `Schema '${parsed.schema}' returned no tables. Verify the schema exists with pg_list_schemas.`
254
+ : undefined;
255
+ return {
256
+ snapshot,
257
+ stats,
258
+ generatedAt: new Date().toISOString(),
259
+ ...(parsed.compact && { compact: true }),
260
+ ...(hint !== undefined && { hint }),
261
+ };
262
+ }
263
+ catch (error) {
264
+ return {
265
+ success: false,
266
+ error: formatPostgresError(error, {
267
+ tool: "pg_schema_snapshot",
268
+ }),
269
+ };
270
+ }
271
+ },
272
+ };
273
+ }
274
+ // =============================================================================
275
+ // pg_constraint_analysis
276
+ // =============================================================================
277
+ export function createConstraintAnalysisTool(adapter) {
278
+ return {
279
+ name: "pg_constraint_analysis",
280
+ description: "Analyze all constraints for issues: redundant indexes, missing foreign keys, missing NOT NULL, missing primary keys, and unindexed foreign keys.",
281
+ group: "introspection",
282
+ inputSchema: ConstraintAnalysisSchemaBase,
283
+ outputSchema: ConstraintAnalysisOutputSchema,
284
+ annotations: readOnly("Constraint Analysis"),
285
+ icons: getToolIcons("introspection", readOnly("Constraint Analysis")),
286
+ handler: async (params, _context) => {
287
+ try {
288
+ const parsed = ConstraintAnalysisSchema.parse(params);
289
+ const runAll = !parsed.checks || parsed.checks.length === 0;
290
+ const checks = new Set(parsed.checks ?? []);
291
+ const findings = [];
292
+ const schemaParams = [];
293
+ let schemaWhere = "";
294
+ let tableWhere = "";
295
+ if (parsed.schema) {
296
+ schemaParams.push(parsed.schema);
297
+ schemaWhere = `AND n.nspname = $${String(schemaParams.length)}`;
298
+ }
299
+ if (parsed.table) {
300
+ schemaParams.push(parsed.table);
301
+ tableWhere = `AND c.relname = $${String(schemaParams.length)}`;
302
+ }
303
+ const extensionSchemaExclude = !parsed.schema &&
304
+ !parsed.table &&
305
+ parsed.excludeExtensionSchemas !== false
306
+ ? "AND n.nspname NOT IN ('cron', 'topology', 'tiger', 'tiger_data')"
307
+ : "";
308
+ // Check: Tables without primary keys
309
+ if (runAll || checks.has("missing_pk")) {
310
+ const result = await adapter.executeQuery(`SELECT n.nspname AS schema, c.relname AS table_name
311
+ FROM pg_class c
312
+ JOIN pg_namespace n ON n.oid = c.relnamespace
313
+ WHERE c.relkind IN ('r', 'p')
314
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
315
+ AND n.nspname !~ '^pg_toast'
316
+ AND NOT EXISTS (
317
+ SELECT 1 FROM pg_constraint pk
318
+ WHERE pk.conrelid = c.oid AND pk.contype = 'p'
319
+ )
320
+ ${extensionSchemaExclude} ${schemaWhere} ${tableWhere}
321
+ ORDER BY n.nspname, c.relname`, schemaParams.length > 0 ? schemaParams : undefined);
322
+ for (const row of result.rows ?? []) {
323
+ findings.push({
324
+ type: "missing_pk",
325
+ severity: "error",
326
+ table: qualifiedName(row["schema"], row["table_name"]),
327
+ description: "Table has no primary key",
328
+ suggestion: "Add a primary key column (e.g., id SERIAL PRIMARY KEY) for data integrity and efficient lookups",
329
+ });
330
+ }
331
+ }
332
+ // Check: Unindexed foreign keys
333
+ if (runAll || checks.has("unindexed_fk")) {
334
+ const result = await adapter.executeQuery(`SELECT
335
+ n.nspname AS schema, t.relname AS table_name,
336
+ c.conname AS constraint_name,
337
+ array_agg(a.attname ORDER BY x.ordinality) AS columns
338
+ FROM pg_constraint c
339
+ JOIN pg_class t ON t.oid = c.conrelid
340
+ JOIN pg_namespace n ON n.oid = t.relnamespace
341
+ CROSS JOIN LATERAL unnest(c.conkey) WITH ORDINALITY AS x(attnum, ordinality)
342
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = x.attnum
343
+ WHERE c.contype = 'f'
344
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
345
+ ${extensionSchemaExclude}
346
+ AND NOT EXISTS (
347
+ SELECT 1 FROM pg_index ix
348
+ WHERE ix.indrelid = t.oid
349
+ AND c.conkey <@ ix.indkey::smallint[]
350
+ )
351
+ ${schemaWhere} ${tableWhere.replace("c.relname", "t.relname")}
352
+ GROUP BY n.nspname, t.relname, c.conname
353
+ ORDER BY n.nspname, t.relname`, schemaParams.length > 0 ? schemaParams : undefined);
354
+ for (const row of result.rows ?? []) {
355
+ const cols = parseArrayColumn(row["columns"]);
356
+ findings.push({
357
+ type: "unindexed_fk",
358
+ severity: "warning",
359
+ table: qualifiedName(row["schema"], row["table_name"]),
360
+ description: `Foreign key '${row["constraint_name"]}' on column(s) [${cols.join(", ")}] has no supporting index`,
361
+ suggestion: `CREATE INDEX ON ${qualifiedName(row["schema"], row["table_name"])} (${cols.join(", ")})`,
362
+ });
363
+ }
364
+ }
365
+ // Check: Tables with columns that likely should have NOT NULL
366
+ if (runAll || checks.has("missing_not_null")) {
367
+ const result = await adapter.executeQuery(`SELECT
368
+ n.nspname AS schema, c.relname AS table_name,
369
+ a.attname AS column_name, pg_catalog.format_type(a.atttypid, a.atttypmod) AS type
370
+ FROM pg_attribute a
371
+ JOIN pg_class c ON c.oid = a.attrelid
372
+ JOIN pg_namespace n ON n.oid = c.relnamespace
373
+ WHERE c.relkind IN ('r', 'p')
374
+ AND a.attnum > 0 AND NOT a.attisdropped AND a.attnotnull = false
375
+ AND n.nspname NOT IN ('pg_catalog', 'information_schema')
376
+ AND n.nspname !~ '^pg_toast'
377
+ ${extensionSchemaExclude}
378
+ AND a.attname IN ('id', 'uuid', 'email', 'name', 'created_at', 'updated_at', 'status', 'type')
379
+ AND NOT EXISTS (SELECT 1 FROM pg_constraint pk WHERE pk.conrelid = c.oid AND a.attnum = ANY(pk.conkey) AND pk.contype = 'p')
380
+ ${schemaWhere} ${tableWhere}
381
+ ORDER BY n.nspname, c.relname, a.attname`, schemaParams.length > 0 ? schemaParams : undefined);
382
+ for (const row of result.rows ?? []) {
383
+ findings.push({
384
+ type: "missing_not_null",
385
+ severity: "info",
386
+ table: qualifiedName(row["schema"], row["table_name"]),
387
+ description: `Column '${row["column_name"]}' (${row["type"]}) is nullable but commonly expected to be NOT NULL`,
388
+ suggestion: `ALTER TABLE ${qualifiedName(row["schema"], row["table_name"])} ALTER COLUMN "${row["column_name"]}" SET NOT NULL`,
389
+ });
390
+ }
391
+ }
392
+ // Build summary
393
+ const byType = {};
394
+ const bySeverity = {};
395
+ for (const f of findings) {
396
+ byType[f.type] = (byType[f.type] ?? 0) + 1;
397
+ bySeverity[f.severity] = (bySeverity[f.severity] ?? 0) + 1;
398
+ }
399
+ // Add hint for nonexistent table
400
+ const hint = parsed.table !== undefined && findings.length === 0
401
+ ? `No findings for table '${parsed.schema ? parsed.schema + "." : "public."}${parsed.table}'. Verify the table exists with pg_list_tables.`
402
+ : undefined;
403
+ return {
404
+ findings,
405
+ summary: {
406
+ totalFindings: findings.length,
407
+ byType,
408
+ bySeverity,
409
+ },
410
+ ...(hint !== undefined && { hint }),
411
+ };
412
+ }
413
+ catch (error) {
414
+ return {
415
+ success: false,
416
+ error: formatPostgresError(error, {
417
+ tool: "pg_constraint_analysis",
418
+ }),
419
+ };
420
+ }
421
+ },
422
+ };
423
+ }
424
+ // =============================================================================
425
+ // pg_migration_risks
426
+ // =============================================================================
427
+ /** DDL patterns and their associated risks */
428
+ const DDL_RISK_PATTERNS = [
429
+ {
430
+ pattern: /\bDROP\s+TABLE\b/i,
431
+ category: "data_loss",
432
+ riskLevel: "critical",
433
+ description: "DROP TABLE permanently deletes the table and all its data",
434
+ mitigation: "Back up the table first (pg_dump_table), verify no active references",
435
+ requiresDowntime: false,
436
+ lockImpact: "ACCESS EXCLUSIVE on the table",
437
+ },
438
+ {
439
+ pattern: /\bTRUNCATE\b/i,
440
+ category: "data_loss",
441
+ riskLevel: "critical",
442
+ description: "TRUNCATE removes all rows from the table",
443
+ mitigation: "Verify you intend to delete all data, check CASCADE effects",
444
+ requiresDowntime: false,
445
+ lockImpact: "ACCESS EXCLUSIVE on the table",
446
+ },
447
+ {
448
+ pattern: /\bDROP\s+COLUMN\b/i,
449
+ category: "data_loss",
450
+ riskLevel: "high",
451
+ description: "DROP COLUMN permanently removes the column and its data",
452
+ mitigation: "Back up the column data first, verify no application dependencies",
453
+ requiresDowntime: false,
454
+ lockImpact: "ACCESS EXCLUSIVE on the table",
455
+ },
456
+ {
457
+ pattern: /\bALTER\s+(?:TABLE|COLUMN)\b.*\bSET\s+NOT\s+NULL\b/i,
458
+ category: "constraint",
459
+ riskLevel: "high",
460
+ description: "Adding NOT NULL requires a full table scan to verify no NULL values exist",
461
+ mitigation: "First check for NULLs: SELECT COUNT(*) FROM table WHERE column IS NULL",
462
+ requiresDowntime: false,
463
+ lockImpact: "ACCESS EXCLUSIVE during verification scan",
464
+ },
465
+ {
466
+ pattern: /\bALTER\s+TABLE\b.*\bADD\s+(?:CONSTRAINT\b.*\b)?FOREIGN\s+KEY\b/i,
467
+ category: "constraint",
468
+ riskLevel: "medium",
469
+ description: "Adding a foreign key requires validating all existing rows",
470
+ mitigation: "Use NOT VALID to skip validation, then VALIDATE CONSTRAINT separately",
471
+ requiresDowntime: false,
472
+ lockImpact: "SHARE ROW EXCLUSIVE on both tables",
473
+ },
474
+ {
475
+ pattern: /\bALTER\s+TABLE\b.*\bADD\s+COLUMN\b/i,
476
+ category: "schema_change",
477
+ riskLevel: "low",
478
+ description: "Adding a nullable column without a default is a metadata-only change",
479
+ requiresDowntime: false,
480
+ lockImpact: "ACCESS EXCLUSIVE (very brief)",
481
+ },
482
+ {
483
+ pattern: /\bALTER\s+TABLE\b.*\bADD\s+COLUMN\b.*\bDEFAULT\b/i,
484
+ category: "schema_change",
485
+ riskLevel: "medium",
486
+ description: "Adding a column with a volatile DEFAULT may require rewriting all rows (PG < 11) or is metadata-only (PG >= 11)",
487
+ mitigation: "On PG >= 11, this is usually fast. On older versions, consider adding without default then updating",
488
+ requiresDowntime: false,
489
+ lockImpact: "ACCESS EXCLUSIVE (metadata-only on PG >= 11)",
490
+ },
491
+ {
492
+ pattern: /\bALTER\s+TABLE\b.*\bALTER\s+COLUMN\b.*\bTYPE\b/i,
493
+ category: "schema_change",
494
+ riskLevel: "high",
495
+ description: "Changing column type requires rewriting the entire table",
496
+ mitigation: "Consider creating a new column, migrating data, then dropping the old one",
497
+ requiresDowntime: true,
498
+ lockImpact: "ACCESS EXCLUSIVE for the entire rewrite",
499
+ },
500
+ {
501
+ pattern: /\bCREATE\s+INDEX\b(?!\s+CONCURRENTLY)/i,
502
+ category: "locking",
503
+ riskLevel: "high",
504
+ description: "CREATE INDEX (non-concurrent) blocks writes to the table for the entire build duration",
505
+ mitigation: "Use CREATE INDEX CONCURRENTLY to avoid blocking writes",
506
+ requiresDowntime: false,
507
+ lockImpact: "SHARE lock on the table (blocks INSERT/UPDATE/DELETE)",
508
+ },
509
+ {
510
+ pattern: /\bCREATE\s+INDEX\s+CONCURRENTLY\b/i,
511
+ category: "locking",
512
+ riskLevel: "low",
513
+ description: "CREATE INDEX CONCURRENTLY allows concurrent writes but takes longer",
514
+ requiresDowntime: false,
515
+ lockImpact: "No blocking locks (uses ShareUpdateExclusiveLock)",
516
+ },
517
+ {
518
+ pattern: /\bDROP\s+INDEX\b(?!\s+CONCURRENTLY)/i,
519
+ category: "locking",
520
+ riskLevel: "medium",
521
+ description: "DROP INDEX blocks writes briefly. May degrade query performance",
522
+ mitigation: "Use DROP INDEX CONCURRENTLY in production, verify no critical queries depend on it",
523
+ requiresDowntime: false,
524
+ lockImpact: "ACCESS EXCLUSIVE (brief)",
525
+ },
526
+ {
527
+ pattern: /\bRENAME\s+(?:TABLE|COLUMN|TO)\b/i,
528
+ category: "breaking_change",
529
+ riskLevel: "high",
530
+ description: "Renaming a table or column will break any application queries referencing the old name",
531
+ mitigation: "Create a view with the old name pointing to the new name for backward compatibility",
532
+ requiresDowntime: false,
533
+ lockImpact: "ACCESS EXCLUSIVE (brief)",
534
+ },
535
+ {
536
+ pattern: /\bDROP\s+SCHEMA\b.*\bCASCADE\b/i,
537
+ category: "data_loss",
538
+ riskLevel: "critical",
539
+ description: "DROP SCHEMA CASCADE deletes the schema and ALL objects within it",
540
+ mitigation: "List all objects in the schema first, verify intent, and back up critical data",
541
+ requiresDowntime: false,
542
+ lockImpact: "ACCESS EXCLUSIVE on all objects in the schema",
543
+ },
544
+ ];
545
+ export function createMigrationRisksTool(adapter) {
546
+ return {
547
+ name: "pg_migration_risks",
548
+ description: "Analyze proposed DDL statements for risks: data loss, lock contention, constraint violations, and breaking changes. Pre-flight check before executing migrations.",
549
+ group: "introspection",
550
+ inputSchema: MigrationRisksSchemaBase,
551
+ outputSchema: MigrationRisksOutputSchema,
552
+ annotations: readOnly("Migration Risks"),
553
+ icons: getToolIcons("introspection", readOnly("Migration Risks")),
554
+ handler: (params, _context) => Promise.resolve()
555
+ .then(() => {
556
+ // Suppress unused-var — adapter captured by closure per tool factory pattern
557
+ void adapter;
558
+ const parsed = MigrationRisksSchema.parse(params);
559
+ const risks = [];
560
+ let requiresDowntime = false;
561
+ let highestRiskLevel = "low";
562
+ const lockImpacts = new Set();
563
+ const riskOrder = { low: 0, medium: 1, high: 2, critical: 3 };
564
+ for (let i = 0; i < parsed.statements.length; i++) {
565
+ const stmt = parsed.statements[i] ?? "";
566
+ for (const pattern of DDL_RISK_PATTERNS) {
567
+ if (pattern.pattern.test(stmt)) {
568
+ risks.push({
569
+ statement: stmt.length > 200 ? stmt.slice(0, 200) + "..." : stmt,
570
+ statementIndex: i,
571
+ riskLevel: pattern.riskLevel,
572
+ category: pattern.category,
573
+ description: pattern.description,
574
+ mitigation: pattern.mitigation,
575
+ });
576
+ if (pattern.requiresDowntime) {
577
+ requiresDowntime = true;
578
+ }
579
+ if (riskOrder[pattern.riskLevel] > riskOrder[highestRiskLevel]) {
580
+ highestRiskLevel = pattern.riskLevel;
581
+ }
582
+ lockImpacts.add(pattern.lockImpact);
583
+ }
584
+ }
585
+ }
586
+ return {
587
+ risks,
588
+ summary: {
589
+ totalStatements: parsed.statements.length,
590
+ totalRisks: risks.length,
591
+ highestRisk: highestRiskLevel,
592
+ requiresDowntime,
593
+ estimatedLockImpact: lockImpacts.size > 0 ? [...lockImpacts].join("; ") : "None",
594
+ },
595
+ };
596
+ })
597
+ .catch((error) => ({
598
+ success: false,
599
+ error: formatPostgresError(error, {
600
+ tool: "pg_migration_risks",
601
+ }),
602
+ })),
603
+ };
604
+ }
605
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/introspection/analysis.ts"],"names":[],"mappings":"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"}