@neverinfamous/postgres-mcp 2.0.0 → 2.1.0

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