pg-converter 2.0b0__tar.gz

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 (240) hide show
  1. pg_converter-2.0b0/LICENSE +21 -0
  2. pg_converter-2.0b0/MANIFEST.in +7 -0
  3. pg_converter-2.0b0/PKG-INFO +390 -0
  4. pg_converter-2.0b0/README.md +342 -0
  5. pg_converter-2.0b0/conf/pg_converter.conf.example +54 -0
  6. pg_converter-2.0b0/docs/ARCHITECTURE.md +395 -0
  7. pg_converter-2.0b0/docs/BUNDLED_PACKETS.md +168 -0
  8. pg_converter-2.0b0/docs/CONFIGURATION.md +338 -0
  9. pg_converter-2.0b0/docs/DIAGRAMS.md +528 -0
  10. pg_converter-2.0b0/docs/EXPORT_AND_HOOKS.md +360 -0
  11. pg_converter-2.0b0/docs/OPERATIONS.md +415 -0
  12. pg_converter-2.0b0/docs/PACKET_FORMAT.md +469 -0
  13. pg_converter-2.0b0/docs/PROGRAMMATIC_API.md +390 -0
  14. pg_converter-2.0b0/docs/ROADMAP.md +174 -0
  15. pg_converter-2.0b0/docs/SECURITY.md +355 -0
  16. pg_converter-2.0b0/docs/USE_CASES.md +373 -0
  17. pg_converter-2.0b0/pyproject.toml +90 -0
  18. pg_converter-2.0b0/setup.cfg +4 -0
  19. pg_converter-2.0b0/src/pg_converter/__init__.py +21 -0
  20. pg_converter-2.0b0/src/pg_converter/__main__.py +14 -0
  21. pg_converter-2.0b0/src/pg_converter/api.py +114 -0
  22. pg_converter-2.0b0/src/pg_converter/bundled/__init__.py +0 -0
  23. pg_converter-2.0b0/src/pg_converter/bundled/conf/pg_converter.conf.example +54 -0
  24. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_bloat/01_step.sql +117 -0
  25. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_bloat/02_step.sql +73 -0
  26. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_bloat/meta_data.json +13 -0
  27. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_check_autovacuum/01_step.sql +18 -0
  28. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_check_autovacuum/meta_data.json +10 -0
  29. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_int4_capacity/01_gen_obj.sql +22 -0
  30. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_int4_capacity/01_step.sql +32 -0
  31. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_int4_capacity/meta_data.json +14 -0
  32. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_invalid_indexes/01_step.sql +8 -0
  33. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_invalid_indexes/meta_data.json +12 -0
  34. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_max_connections/01_step.sql +9 -0
  35. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_max_connections/meta_data.json +13 -0
  36. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_stat/01_step.sql +34 -0
  37. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_stat/meta_data.json +13 -0
  38. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_xact_age/01_step.sql +11 -0
  39. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_xact_age/02_step.sql +7 -0
  40. pg_converter-2.0b0/src/pg_converter/bundled/packets/alert_xact_age/meta_data.json +13 -0
  41. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_active_maint/01_step.sql +34 -0
  42. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_active_maint/meta_data.json +11 -0
  43. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_clone_schema/01_step.sql +433 -0
  44. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_clone_schema/meta_data.json +4 -0
  45. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_find_db/01_step.sql +1 -0
  46. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_find_db/meta_data.json +5 -0
  47. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_get_conf/01_step.sql +32 -0
  48. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_get_conf/meta_data.json +5 -0
  49. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_get_version/01_step.sql +1 -0
  50. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_get_version/meta_data.json +11 -0
  51. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/01_step.sql +21 -0
  52. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/02_step.sql +16 -0
  53. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/03_step.sql +16 -0
  54. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/04_step.sql +23 -0
  55. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/05_step.sql +29 -0
  56. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/06_step.sql +46 -0
  57. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/07_step.sql +36 -0
  58. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/08_step.sql +12 -0
  59. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/09_step.sql +18 -0
  60. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/10_step.sql +20 -0
  61. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_idx_diag/meta_data.json +5 -0
  62. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_lag/01_step.sql +8 -0
  63. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_lag/meta_data.json +11 -0
  64. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_locks/01_step.sql +23 -0
  65. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_locks/meta_data.json +11 -0
  66. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_long_queries/01_step.sql +22 -0
  67. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_long_queries/meta_data.json +11 -0
  68. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_top_tables/01_step.sql +56 -0
  69. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_top_tables/meta_data.json +11 -0
  70. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_xact_age/01_step.sql +10 -0
  71. pg_converter-2.0b0/src/pg_converter/bundled/packets/dba_xact_age/meta_data.json +11 -0
  72. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_blocker_tx/01_step.sql +6 -0
  73. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_blocker_tx/02_step.sql +5 -0
  74. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_blocker_tx/meta_data.json +12 -0
  75. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/01_step.sql +8 -0
  76. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/02_gen_obj.sql +32 -0
  77. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/02_step.sql +3 -0
  78. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/03_gen_nsp.sql +7 -0
  79. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/03_step.sql +3 -0
  80. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/04_gen_nsp.sql +7 -0
  81. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/04_gen_obj.sql +8 -0
  82. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/04_step.sql +3 -0
  83. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/05_step.sql +8 -0
  84. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/06_step.sql +8 -0
  85. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_common/meta_data.json +6 -0
  86. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_clone_schema/01_step.sql +47 -0
  87. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_clone_schema/02_step.sql +11 -0
  88. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_clone_schema/03_step.sql +11 -0
  89. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_clone_schema/meta_data.json +5 -0
  90. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/00_prepare.sql +128 -0
  91. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/01_step.sql_out +41 -0
  92. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/02_step.sql_out +15 -0
  93. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/03_step.sql_out +17 -0
  94. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/04_step.sql_out +58 -0
  95. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/05_step.sql_out +99 -0
  96. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/06_step.sql_out +31 -0
  97. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/07_step.sql_out +24 -0
  98. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/08_step.sql_out +8 -0
  99. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/09_step.sql_out +16 -0
  100. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_dba_idx_diag/10_step.sql_out +16 -0
  101. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_export_data/01_test.sql +22 -0
  102. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_export_data/02_test.sql +2 -0
  103. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_export_data/meta_data.json +9 -0
  104. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/00_step.sql +21 -0
  105. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/01_gen_nsp.sql +7 -0
  106. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/01_gen_obj.sql +8 -0
  107. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/01_step.sql +3 -0
  108. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/02_gen_nsp.sql +7 -0
  109. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/02_step.sql +3 -0
  110. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/03_gen_obj.sql +7 -0
  111. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/03_step.sql +3 -0
  112. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_gens/meta_data.json +7 -0
  113. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_get_version/01_step.sql +1 -0
  114. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_get_version/meta_data.json +11 -0
  115. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_insert_delete_select/01_step.sql +5 -0
  116. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_insert_delete_select/meta_data.json +12 -0
  117. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_insert_info/01_step.sql +11 -0
  118. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_insert_info/meta_data.json +11 -0
  119. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/01_step.sql +33 -0
  120. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/02_gen_obj.sql +28 -0
  121. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/02_step.sql +7 -0
  122. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/03_step.sql +5 -0
  123. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/04_step.sql +14 -0
  124. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/05_step.sql +2 -0
  125. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/06_step.sql +16 -0
  126. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/07_step.sql +2 -0
  127. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/meta_data.json +5 -0
  128. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_int4_to_int8/run_once.sql +12 -0
  129. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/01_step.sql +1 -0
  130. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/02_step.sql +1 -0
  131. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/03_step.sql +5 -0
  132. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/04_step.sql +1 -0
  133. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/05_step.sql +3 -0
  134. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/06_step.sql +1 -0
  135. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_maint/meta_data.json +12 -0
  136. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_override_conf_param/01_step.sql +1 -0
  137. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_override_conf_param/meta_data.json +4 -0
  138. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_placeholders/00_step.sql +3 -0
  139. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_placeholders/01_gen_obj.sql +3 -0
  140. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_placeholders/01_step.sql +3 -0
  141. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_placeholders/meta_data.json +3 -0
  142. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_prepare_dbs/01_gen_obj.sql +25 -0
  143. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_prepare_dbs/01_step.sql +1 -0
  144. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_prepare_dbs/meta_data.json +4 -0
  145. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_py_step/01_step.sql +9 -0
  146. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_py_step/02_step.py +15 -0
  147. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_py_step/data/data_a.txt +1 -0
  148. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_py_step/data/data_b.txt +1 -0
  149. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_py_step/meta_data.json +5 -0
  150. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_raise/01_step.sql +8 -0
  151. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_raise/meta_data.json +10 -0
  152. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only/01_step.sql +12 -0
  153. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only/meta_data.json +12 -0
  154. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_exception/01_step.sql +12 -0
  155. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_exception/meta_data.json +4 -0
  156. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/01_gen_nsp.sql +7 -0
  157. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/01_gen_obj.sql +8 -0
  158. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/01_step.sql +3 -0
  159. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/02_gen_nsp.sql +7 -0
  160. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/02_step.sql +3 -0
  161. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/03_gen_obj.sql +7 -0
  162. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/03_step.sql +3 -0
  163. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_gens/meta_data.json +7 -0
  164. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_raise/01_step.sql +8 -0
  165. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_read_only_raise/meta_data.json +10 -0
  166. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_action_cancel/01_step.sql +5 -0
  167. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_action_cancel/02_gen_obj.sql +8 -0
  168. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_action_cancel/02_step.sql +3 -0
  169. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_action_cancel/03_step.sql +5 -0
  170. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_action_cancel/meta_data.json +4 -0
  171. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_step_cancel/01_step.sql +5 -0
  172. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_step_cancel/02_step.sql +5 -0
  173. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_step_cancel/03_step.sql +5 -0
  174. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_skip_step_cancel/meta_data.json +4 -0
  175. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_sleep/01_step.sql +5 -0
  176. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_sleep/meta_data.json +5 -0
  177. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_sleep_sigint/01_step.sql +5 -0
  178. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_sleep_sigint/02_step.sql +5 -0
  179. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_sleep_sigint/meta_data.json +5 -0
  180. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_syntax_exception/01_step.sql +5 -0
  181. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_template/02_gen_obj.sql +32 -0
  182. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_template/02_step.sql +3 -0
  183. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_template/03_gen_nsp.sql +7 -0
  184. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_template/03_step.sql +3 -0
  185. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_unique_exception/01_step.sql +6 -0
  186. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_unique_exception/meta_data.json +11 -0
  187. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_wait_tx/01_step.sql +6 -0
  188. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_wait_tx/02_step.sql +1 -0
  189. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_wait_tx/03_step.sql +1 -0
  190. pg_converter-2.0b0/src/pg_converter/bundled/packets/test_wait_tx/meta_data.json +12 -0
  191. pg_converter-2.0b0/src/pg_converter/cli.py +173 -0
  192. pg_converter-2.0b0/src/pg_converter/config.py +388 -0
  193. pg_converter-2.0b0/src/pg_converter/core/__init__.py +103 -0
  194. pg_converter-2.0b0/src/pg_converter/core/constants.py +114 -0
  195. pg_converter-2.0b0/src/pg_converter/core/context.py +212 -0
  196. pg_converter-2.0b0/src/pg_converter/core/database.py +433 -0
  197. pg_converter-2.0b0/src/pg_converter/core/events.py +70 -0
  198. pg_converter-2.0b0/src/pg_converter/core/executor.py +813 -0
  199. pg_converter-2.0b0/src/pg_converter/core/failures.py +269 -0
  200. pg_converter-2.0b0/src/pg_converter/core/lock_observer.py +396 -0
  201. pg_converter-2.0b0/src/pg_converter/core/packet.py +440 -0
  202. pg_converter-2.0b0/src/pg_converter/core/python_executor.py +256 -0
  203. pg_converter-2.0b0/src/pg_converter/core/session.py +248 -0
  204. pg_converter-2.0b0/src/pg_converter/core/tracker.py +597 -0
  205. pg_converter-2.0b0/src/pg_converter/logging_config.py +513 -0
  206. pg_converter-2.0b0/src/pg_converter/resources.py +26 -0
  207. pg_converter-2.0b0/src/pg_converter/runner.py +1587 -0
  208. pg_converter-2.0b0/src/pg_converter/utils/__init__.py +50 -0
  209. pg_converter-2.0b0/src/pg_converter/utils/common.py +171 -0
  210. pg_converter-2.0b0/src/pg_converter/utils/export.py +217 -0
  211. pg_converter-2.0b0/src/pg_converter/utils/signals.py +173 -0
  212. pg_converter-2.0b0/src/pg_converter/utils/webhooks.py +448 -0
  213. pg_converter-2.0b0/src/pg_converter.egg-info/PKG-INFO +390 -0
  214. pg_converter-2.0b0/src/pg_converter.egg-info/SOURCES.txt +238 -0
  215. pg_converter-2.0b0/src/pg_converter.egg-info/dependency_links.txt +1 -0
  216. pg_converter-2.0b0/src/pg_converter.egg-info/entry_points.txt +2 -0
  217. pg_converter-2.0b0/src/pg_converter.egg-info/requires.txt +25 -0
  218. pg_converter-2.0b0/src/pg_converter.egg-info/top_level.txt +1 -0
  219. pg_converter-2.0b0/tests/README.md +309 -0
  220. pg_converter-2.0b0/tests/__init__.py +4 -0
  221. pg_converter-2.0b0/tests/bundled_packet_manifest.py +47 -0
  222. pg_converter-2.0b0/tests/conftest.py +161 -0
  223. pg_converter-2.0b0/tests/integration/__init__.py +1 -0
  224. pg_converter-2.0b0/tests/integration/test_postgresql_matrix.py +1173 -0
  225. pg_converter-2.0b0/tests/integration/test_ssl.py +165 -0
  226. pg_converter-2.0b0/tests/test_api.py +108 -0
  227. pg_converter-2.0b0/tests/test_bundled_packet_manifest.py +27 -0
  228. pg_converter-2.0b0/tests/test_cli.py +232 -0
  229. pg_converter-2.0b0/tests/test_config.py +246 -0
  230. pg_converter-2.0b0/tests/test_constants.py +176 -0
  231. pg_converter-2.0b0/tests/test_context.py +19 -0
  232. pg_converter-2.0b0/tests/test_database.py +569 -0
  233. pg_converter-2.0b0/tests/test_failures.py +112 -0
  234. pg_converter-2.0b0/tests/test_lock_observer.py +74 -0
  235. pg_converter-2.0b0/tests/test_packet.py +455 -0
  236. pg_converter-2.0b0/tests/test_postgresql_integration.py +250 -0
  237. pg_converter-2.0b0/tests/test_runner.py +163 -0
  238. pg_converter-2.0b0/tests/test_session.py +162 -0
  239. pg_converter-2.0b0/tests/test_tracker.py +176 -0
  240. pg_converter-2.0b0/tests/test_utils.py +320 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Oleg Gurov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ include LICENSE
2
+ include README.md
3
+ recursive-include conf *.example
4
+ recursive-include docs *.md
5
+ recursive-include tests *.py *.md
6
+ recursive-include src/pg_converter/bundled *
7
+ global-exclude __pycache__ *.py[cod] .DS_Store
@@ -0,0 +1,390 @@
1
+ Metadata-Version: 2.4
2
+ Name: pg-converter
3
+ Version: 2.0b0
4
+ Summary: Asynchronous PostgreSQL packet migration and operations tool
5
+ Author-email: O2eg <oleg.ispu@yandex.ru>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/O2eg/pg_converter
8
+ Project-URL: Repository, https://github.com/O2eg/pg_converter
9
+ Project-URL: Issues, https://github.com/O2eg/pg_converter/issues
10
+ Keywords: postgresql,migration,database,dba,asyncio
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Database
22
+ Classifier: Topic :: System :: Systems Administration
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: asyncpg<1,>=0.27
27
+ Requires-Dist: sqlparse<1,>=0.5
28
+ Provides-Extra: test
29
+ Requires-Dist: pytest<9,>=7; extra == "test"
30
+ Requires-Dist: pytest-asyncio<1,>=0.21; extra == "test"
31
+ Requires-Dist: pytest-mock<4,>=3.10; extra == "test"
32
+ Provides-Extra: export
33
+ Requires-Dist: pyzipper<1,>=0.3.5; extra == "export"
34
+ Provides-Extra: webhooks
35
+ Requires-Dist: aiohttp<4,>=3.8; extra == "webhooks"
36
+ Provides-Extra: dev
37
+ Requires-Dist: build<2,>=1.2; extra == "dev"
38
+ Requires-Dist: black>=23; extra == "dev"
39
+ Requires-Dist: flake8>=6; extra == "dev"
40
+ Requires-Dist: isort>=5.12; extra == "dev"
41
+ Requires-Dist: mypy>=1; extra == "dev"
42
+ Requires-Dist: pytest<9,>=7; extra == "dev"
43
+ Requires-Dist: pytest-asyncio<1,>=0.21; extra == "dev"
44
+ Requires-Dist: pytest-cov>=4; extra == "dev"
45
+ Requires-Dist: pytest-mock<4,>=3.10; extra == "dev"
46
+ Requires-Dist: twine<7,>=6; extra == "dev"
47
+ Dynamic: license-file
48
+
49
+ # PG Converter
50
+
51
+ `pg_converter` 2.0 beta runs SQL and Python packets against one or more PostgreSQL
52
+ databases. It retains the original packet execution model under the `pgc_*`
53
+ tracker and `PGC_PL_*` placeholder namespaces. The threaded runtime has been
54
+ replaced with `asyncio` and `asyncpg`; bounded retry, reconnection, SSL/mTLS,
55
+ and a programmatic API for a future UI have been added.
56
+
57
+ The repository contains every original packet: 46 directories and 167 files.
58
+ The Python-step example uses the asynchronous API, and hook metadata uses the
59
+ `pg_converter` username. SQL, generator, tracker, and action behavior is
60
+ retained with PG Converter 2.0 names.
61
+
62
+ ## Project status
63
+
64
+ The core runtime and original packet contract are tested on PostgreSQL 10-18.
65
+ The wheel and source distribution include the complete bundled packet tree,
66
+ the configuration example, package metadata, and license. Remaining
67
+ stabilization work includes:
68
+
69
+ - programmatic JSON contracts are not yet versioned;
70
+ - concurrent database tasks do not yet have a configurable upper bound;
71
+ - several logging settings are loaded but are not yet connected to the CLI
72
+ renderer;
73
+ - production fixtures for non-standard deployed tracker revisions are still
74
+ being collected.
75
+
76
+ The remaining work and stable-release criteria are recorded in the
77
+ [roadmap](docs/ROADMAP.md).
78
+
79
+ ## Documentation
80
+
81
+ - [Architecture and asynchronous runtime](docs/ARCHITECTURE.md)
82
+ - [Complete ASCII diagram catalog](docs/DIAGRAMS.md)
83
+ - [Configuration](docs/CONFIGURATION.md)
84
+ - [Packet, step, action, and generator format](docs/PACKET_FORMAT.md)
85
+ - [CLI operations and recovery](docs/OPERATIONS.md)
86
+ - [Security and trust boundaries](docs/SECURITY.md)
87
+ - [Programmatic API and events](docs/PROGRAMMATIC_API.md)
88
+ - [Export and Mattermost/Slack hooks](docs/EXPORT_AND_HOOKS.md)
89
+ - [Bundled packet catalog](docs/BUNDLED_PACKETS.md)
90
+ - [Use cases](docs/USE_CASES.md)
91
+ - [Tests and the PostgreSQL 10-18 matrix](tests/README.md)
92
+ - [Stabilization roadmap](docs/ROADMAP.md)
93
+
94
+ ## Features
95
+
96
+ - parallel asynchronous database processing and sequential `--seq` mode;
97
+ - `default`, `read_only`, `no_commit`, `maintenance`, and `export_data`
98
+ packet types;
99
+ - `run_once.sql`, object/schema generators, and maintenance commands;
100
+ - `GEN_OBJ_FLD_N`, `GEN_NSP_FLD_N`, and user-defined `PGC_PL_*` placeholders;
101
+ - SQL steps and synchronous/asynchronous Python steps;
102
+ - persistent `pgc_packets`, `pgc_steps`, `pgc_actions`, and `pgc_locks`;
103
+ - a session advisory lock combined with the durable `pgc_locks` row;
104
+ - bounded retry and reconnection with session-setting and generator recovery;
105
+ - a lock observer for worker-as-blocker and worker-as-waiter cases;
106
+ - typed failures and safe `outcome_unknown` handling;
107
+ - tab-separated output in `.csv` files, ZIP, and AES ZIP;
108
+ - asynchronous Mattermost and Slack hooks;
109
+ - SSL/TLS, CA and hostname verification, CRL, and client certificates;
110
+ - a cancellable UI-neutral API with events and a JSON-safe result;
111
+ - PostgreSQL 10-18 container tests and a separate mTLS test.
112
+
113
+ ## Requirements
114
+
115
+ | Component | Supported contract |
116
+ |---|---|
117
+ | Python | 3.10 or newer |
118
+ | PostgreSQL | Major versions 10-18 |
119
+ | Operating system | Linux is the primary CI-tested platform |
120
+ | Runtime dependencies | `asyncpg`, `sqlparse` |
121
+ | AES export | Optional `export` extra (`pyzipper`) |
122
+ | Webhooks | Optional `webhooks` extra (`aiohttp`) |
123
+ | Tests and development | Optional `dev` extra |
124
+
125
+ No PostgreSQL extension is required. The database role must be able to perform
126
+ the target changes, create or use the tracker schema, and inspect its own
127
+ backend sessions. Stopping backends owned by another role may require
128
+ `pg_signal_backend` or superuser; see the [security guide](docs/SECURITY.md).
129
+
130
+ ## Installation
131
+
132
+ Install a built release:
133
+
134
+ ```bash
135
+ python -m pip install 'pg-converter[export,webhooks]'
136
+ pg-converter --version
137
+ ```
138
+
139
+ For development from a source checkout:
140
+
141
+ ```bash
142
+ git clone https://github.com/O2eg/pg_converter.git
143
+ cd pg_converter
144
+
145
+ python3 -m venv .venv
146
+ . .venv/bin/activate
147
+ python -m pip install --upgrade pip
148
+ python -m pip install -e '.[dev,export,webhooks]'
149
+
150
+ cp conf/pg_converter.conf.example conf/pg_converter.conf
151
+ pg-converter --version
152
+ pg-converter --help
153
+ ```
154
+
155
+ Custom `packets/`, `conf/`, `logs/`, and export paths are resolved from the
156
+ current working directory. A custom `$PWD/packets/PACKET_NAME` overrides a
157
+ bundled packet with the same name; otherwise the installed packet is used.
158
+ A relative `--config-file NAME` resolves to `$PWD/conf/NAME`; an absolute path
159
+ is recommended for external configuration.
160
+
161
+ ## Minimal configuration
162
+
163
+ ```ini
164
+ [databases]
165
+ development = postgresql://user:password@localhost:5432/development
166
+
167
+ [main]
168
+ schema_location = pgc
169
+ db_name_all_confirmation = true
170
+ ```
171
+
172
+ The complete parameter list, defaults, precedence, and current limitations are
173
+ documented in [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
174
+
175
+ ## Quick start
176
+
177
+ ```bash
178
+ # One database.
179
+ pg-converter --packet-name=dba_get_version --db-name=development
180
+
181
+ # Every alias in [databases]; confirmation requires YES when enabled.
182
+ pg-converter --packet-name=dba_get_version --db-name=ALL
183
+
184
+ # Masks and exclusions.
185
+ pg-converter --packet-name=dba_get_version --db-name='prod_*'
186
+ pg-converter --packet-name=dba_get_version \
187
+ --db-name='ALL,exclude:prod_old,dev_*'
188
+
189
+ # Process selected databases sequentially.
190
+ pg-converter --packet-name=test_common --db-name=ALL --seq
191
+
192
+ # Only list selected aliases.
193
+ pg-converter --packet-name=test_common --db-name='prod_*' --list
194
+ ```
195
+
196
+ Administrative operations:
197
+
198
+ ```bash
199
+ pg-converter --packet-name=test_common --db-name=development --status
200
+ pg-converter --packet-name=test_common --db-name=development --wipe
201
+ pg-converter --packet-name=test_common --db-name=development --unlock
202
+ pg-converter --packet-name=test_common --db-name=development --stop
203
+ ```
204
+
205
+ `--status`, `--wipe`, `--unlock`, and `--stop` connect to the database and call
206
+ the non-destructive `init_tables`; if the tracker is absent, its schema and
207
+ tables are created. `--wipe` deletes packet history but does not reverse changes
208
+ to application objects. `--stop` terminates matching backend sessions.
209
+
210
+ The full CLI contract and recovery runbook are in
211
+ [docs/OPERATIONS.md](docs/OPERATIONS.md).
212
+
213
+ ## Packet format at a glance
214
+
215
+ ```text
216
+ packets/my_packet/
217
+ |-- meta_data.json
218
+ |-- run_once.sql
219
+ |-- 01_step.sql
220
+ |-- 02_gen_nsp.sql
221
+ |-- 02_gen_obj.sql
222
+ |-- 02_step.sql
223
+ |-- 03_step.py
224
+ `-- data/
225
+ ```
226
+
227
+ Terminology retained from the original project:
228
+
229
+ - **packet**: a directory representing one logical operation;
230
+ - **step**: a root `.sql` or `.py` file;
231
+ - **action**: one concrete transaction or command produced from a step;
232
+ - **generator**: SQL that supplies values for one step;
233
+ - **conversion/deployment**: applying a packet to selected databases.
234
+
235
+ Steps run in lexical order. A generator-backed step creates multiple actions.
236
+ Generator column zero is reserved for a maintenance command; placeholders start
237
+ at index `1`.
238
+
239
+ `run_once.sql` runs before generators are loaded. TEMP and `pg_temp` objects
240
+ work only while the same physical session survives. After a reconnection they
241
+ are gone, so the runtime fails with `SessionLocalRunOnceLost` instead of
242
+ replaying potentially destructive `run_once.sql`.
243
+
244
+ The normative format, checksum behavior, and transactional guarantees are in
245
+ [docs/PACKET_FORMAT.md](docs/PACKET_FORMAT.md).
246
+
247
+ ## Tracker and resume behavior
248
+
249
+ The following objects are created in `main.schema_location`:
250
+
251
+ - `pgc_packets`: metadata, packet checksum, and final status;
252
+ - `pgc_steps`: status and latest step error;
253
+ - `pgc_actions`: checksums of successfully applied actions;
254
+ - `pgc_locks`: durable representation of the runtime lock.
255
+
256
+ For a `default` packet, a transactional action and its `pgc_actions` row commit
257
+ atomically. After reconnection, already confirmed action hashes are not run
258
+ again.
259
+
260
+ PG Converter 2.0 does not auto-discover tracker objects created by pre-2.0
261
+ builds. Before reusing an existing migration history, migrate its rows and
262
+ database objects to the documented `pgc_*` names or start with a new tracking
263
+ schema only after reviewing which packet actions have already been applied.
264
+ Never run two tracker namespaces for the same packet concurrently.
265
+
266
+ If a connection is lost while a non-transactional or maintenance action is in
267
+ flight, the server may have applied the command even though the client did not
268
+ receive confirmation. The runtime reports `outcome_unknown`, does not retry it,
269
+ and blocks the next normal run. The operator must inspect the database and
270
+ tracker state; `--force` is appropriate only after that review.
271
+
272
+ ## SSL/TLS
273
+
274
+ PostgreSQL URI, `pq://`, and libpq `key=value` formats are supported:
275
+
276
+ ```ini
277
+ [databases]
278
+ verified = postgresql://pgc@db.example.com/app?sslmode=verify-full&sslrootcert=/etc/pg_converter/ca.crt
279
+
280
+ mutual_tls = postgresql://pgc@db.example.com/app?sslmode=verify-full&sslrootcert=/etc/pg_converter/ca.crt&sslcert=/etc/pg_converter/client.crt&sslkey=/etc/pg_converter/client.key
281
+
282
+ libpq_style = host=db.example.com port=5432 dbname=app user=pgc sslmode=verify-ca sslrootcert=/etc/pg_converter/ca.crt sslcert=/etc/pg_converter/client.crt sslkey=/etc/pg_converter/client.key
283
+ ```
284
+
285
+ Read [docs/SECURITY.md](docs/SECURITY.md) before production use: SQL packets,
286
+ Python packets, placeholders, hooks, logs, and exports are separate trust
287
+ boundaries.
288
+
289
+ ## Programmatic API
290
+
291
+ ```python
292
+ from pathlib import Path
293
+
294
+ from pg_converter.api import PGConverterService, RunRequest
295
+
296
+ service = PGConverterService(Path("/etc/pg_converter/pg_converter.conf"))
297
+ handle = service.start(
298
+ RunRequest(
299
+ packet_name="test_common",
300
+ db_name="development",
301
+ placeholders={"SCHEMA": "public"},
302
+ ),
303
+ event_handler=on_execution_event,
304
+ confirmation_handler=confirm_databases,
305
+ )
306
+
307
+ # If needed:
308
+ # cancellation = await handle.cancel()
309
+
310
+ result = await handle.wait()
311
+ payload = result.to_dict()
312
+ ```
313
+
314
+ The API contains no UI components. It exposes `RunRequest`,
315
+ `PGConverterService`, `RunHandle`, `ExecutionEvent`, and `PGCResult`. The
316
+ result is JSON-safe, but it does not yet carry a schema version; integrations
317
+ should pin the `pg-converter` version they use. See
318
+ [docs/PROGRAMMATIC_API.md](docs/PROGRAMMATIC_API.md).
319
+
320
+ ## Exit status and results
321
+
322
+ The CLI returns:
323
+
324
+ | Code | Meaning |
325
+ |---:|---|
326
+ | `0` | Every selected database has `success` or `nothing_todo` |
327
+ | `1` | Argument/runtime error, `fail`, `locked`, `terminate`, or cancellation |
328
+
329
+ The programmatic result distinguishes `success`, `fail`, `locked`,
330
+ `nothing_todo`, and `terminate`. Packet status is one of `done`, `started`,
331
+ `exception`, `new`, or `unknown`.
332
+
333
+ ## Tests
334
+
335
+ ```bash
336
+ # Unit tests.
337
+ pytest -m 'not integration'
338
+
339
+ # One PostgreSQL version.
340
+ PGC_DOCKER_INTEGRATION=1 PGC_DOCKER_VERSIONS=18 \
341
+ pytest --run-integration tests/integration
342
+
343
+ # PostgreSQL 10-18 and TLS/mTLS.
344
+ PGC_DOCKER_INTEGRATION=1 \
345
+ pytest --run-integration tests/integration
346
+ ```
347
+
348
+ The complete matrix in GitHub Actions is currently triggered manually with
349
+ `workflow_dispatch`. The unit suite runs on Python 3.10 and 3.12 for pushes and
350
+ pull requests. Test layout and regression-test guidance are in
351
+ [tests/README.md](tests/README.md).
352
+
353
+ ## Known export security limitations
354
+
355
+ Files are published atomically through `.part` plus rename, but their
356
+ permissions currently depend on the process `umask`. In addition, the
357
+ `"password": "random"` mode puts the AES ZIP password in the filename and that
358
+ archive path is logged. Do not use `random` for sensitive exports until this is
359
+ fixed; use a controlled password and a protected working directory. See
360
+ [docs/EXPORT_AND_HOOKS.md](docs/EXPORT_AND_HOOKS.md).
361
+
362
+ ## Preserved packet and tracker contracts
363
+
364
+ Retained:
365
+
366
+ - the complete original packet set and the `dba_`, `alert_`, `maint_`, `test_`,
367
+ and `YYYYMMDD_TASK_*` naming convention;
368
+ - arbitrary step names and `run_once.sql`;
369
+ - the generator and placeholder model;
370
+ - all five packet types and `meta_data.json`;
371
+ - Mattermost/Slack metadata;
372
+ - MD5 packet and action checksums;
373
+ - the `pgc_*` schema and migration history;
374
+ - list/status/wipe/stop/unlock/template and skip-cancel modes.
375
+
376
+ The packet inventory is complete. The asynchronous Python example and bundled
377
+ hook usernames use the PG Converter 2.0 beta runtime contract.
378
+
379
+ Intentional changes:
380
+
381
+ - threads are replaced by asynchronous tasks;
382
+ - `py-postgresql` is replaced by `asyncpg`;
383
+ - unbounded retry is replaced by a bounded policy;
384
+ - lock ownership is strengthened with an advisory lock;
385
+ - ambiguous non-transactional outcomes are not replayed;
386
+ - SSL/mTLS and a UI-neutral API are added.
387
+
388
+ ## License
389
+
390
+ The project is distributed under the MIT License. See [LICENSE](LICENSE).