pg-workload 0.5.0__tar.gz → 0.6.2__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 (148) hide show
  1. {pg_workload-0.5.0/src/pg_workload.egg-info → pg_workload-0.6.2}/PKG-INFO +10 -2
  2. {pg_workload-0.5.0 → pg_workload-0.6.2}/README.md +9 -1
  3. {pg_workload-0.5.0 → pg_workload-0.6.2}/THIRD_PARTY_NOTICES.md +29 -0
  4. {pg_workload-0.5.0 → pg_workload-0.6.2}/pyproject.toml +1 -1
  5. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/__init__.py +1 -1
  6. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/assets.py +3 -0
  7. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/README.md +11 -2
  8. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/generator.py +353 -147
  9. pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/initialization-constraints.json +86 -0
  10. pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/initialization-indexes.json +250 -0
  11. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/profile.yml +0 -4
  12. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/imdb-schema.sql +52 -53
  13. pg_workload-0.6.2/src/pg_workload/bundled/profiles/imdb/sql/initialization-finalize.sql +1 -0
  14. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/README.md +53 -0
  15. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/generator.py +291 -0
  16. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/initialization-constraints.json +351 -0
  17. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/initialization-indexes.json +262 -0
  18. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pagila/profile.yml +10 -5
  19. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/01_select.sql +109 -0
  20. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/02_insert.sql +191 -0
  21. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/03_update.sql +108 -0
  22. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/04_delete.sql +17 -0
  23. pg_workload-0.6.2/src/pg_workload/bundled/profiles/pagila/sql/initialization-finalize.sql +18 -0
  24. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pagila/sql/pagila-schema.sql +85 -774
  25. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/01_workload.sql +1 -1
  26. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/cli.py +16 -1
  27. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/control.py +28 -1
  28. pg_workload-0.6.2/src/pg_workload/initialization.py +148 -0
  29. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/orchestration.py +3 -1
  30. {pg_workload-0.5.0 → pg_workload-0.6.2/src/pg_workload.egg-info}/PKG-INFO +10 -2
  31. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/SOURCES.txt +9 -1
  32. {pg_workload-0.5.0 → pg_workload-0.6.2}/tests/test_docker_postgres18.py +160 -4
  33. pg_workload-0.6.2/tests/test_initialization.py +112 -0
  34. pg_workload-0.6.2/tests/test_scheduler_identity.py +57 -0
  35. {pg_workload-0.5.0 → pg_workload-0.6.2}/tests/test_workload.py +52 -8
  36. pg_workload-0.5.0/src/pg_workload/bundled/profiles/imdb/sql/imdb-fkindexes.sql +0 -67
  37. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/README.md +0 -32
  38. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/generator.py +0 -193
  39. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/01_select.sql +0 -264
  40. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/02_insert.sql +0 -273
  41. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/03_update.sql +0 -149
  42. pg_workload-0.5.0/src/pg_workload/bundled/profiles/pagila/sql/04_delete.sql +0 -27
  43. {pg_workload-0.5.0 → pg_workload-0.6.2}/LICENSE +0 -0
  44. {pg_workload-0.5.0 → pg_workload-0.6.2}/MANIFEST.in +0 -0
  45. {pg_workload-0.5.0 → pg_workload-0.6.2}/setup.cfg +0 -0
  46. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/__main__.py +0 -0
  47. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/README.md +0 -0
  48. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/generator.py +0 -0
  49. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/profile.yml +0 -0
  50. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/sql/01_churn.sql +0 -0
  51. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/bloat_vacuum/sql/accounts-schema.sql +0 -0
  52. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/README.md +0 -0
  53. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/profile.yml +0 -0
  54. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/sql/01_workload.sql +0 -0
  55. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/emulate_errors/sql/schema.sql +0 -0
  56. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/01_company_catalog.sql +0 -0
  57. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/02_people_by_keyword.sql +0 -0
  58. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/03_keyword_trends.sql +0 -0
  59. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/04_genre_cast.sql +0 -0
  60. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/05_join_stress.sql +0 -0
  61. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_1.sql +0 -0
  62. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_10.sql +0 -0
  63. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_11.sql +0 -0
  64. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_12.sql +0 -0
  65. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_13.sql +0 -0
  66. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_14.sql +0 -0
  67. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_15.sql +0 -0
  68. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_16.sql +0 -0
  69. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_17.sql +0 -0
  70. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_18.sql +0 -0
  71. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_19.sql +0 -0
  72. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_2.sql +0 -0
  73. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_20.sql +0 -0
  74. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_21.sql +0 -0
  75. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_22.sql +0 -0
  76. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_23.sql +0 -0
  77. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_24.sql +0 -0
  78. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_25.sql +0 -0
  79. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_26.sql +0 -0
  80. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_27.sql +0 -0
  81. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_28.sql +0 -0
  82. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_29.sql +0 -0
  83. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_3.sql +0 -0
  84. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_30.sql +0 -0
  85. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_31.sql +0 -0
  86. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_32.sql +0 -0
  87. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_33.sql +0 -0
  88. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_4.sql +0 -0
  89. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_5.sql +0 -0
  90. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_6.sql +0 -0
  91. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_7.sql +0 -0
  92. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_8.sql +0 -0
  93. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/imdb/sql/select_9.sql +0 -0
  94. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/README.md +0 -0
  95. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/generator.py +0 -0
  96. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/profile.yml +0 -0
  97. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/01_write.sql +0 -0
  98. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/02_read.sql +0 -0
  99. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/jsonb_docs/sql/docs-schema.sql +0 -0
  100. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/README.md +0 -0
  101. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/profile.yml +0 -0
  102. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/01_workload.sql +0 -0
  103. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/prepare_schema_01.sql +0 -0
  104. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/many_objects/sql/prepare_schema_02.sql +0 -0
  105. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/README.md +0 -0
  106. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/generator.py +0 -0
  107. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/profile.yml +0 -0
  108. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/01_ingest.sql +0 -0
  109. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/02_read_recent.sql +0 -0
  110. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/03_read_history.sql +0 -0
  111. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/partition_aging/sql/events-schema.sql +0 -0
  112. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/README.md +0 -0
  113. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/generator.py +0 -0
  114. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/profile.yml +0 -0
  115. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/sql/01_workload.sql +0 -0
  116. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/pss_overflow/sql/pss_overflow-schema.sql +0 -0
  117. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/README.md +0 -0
  118. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/generator.py +0 -0
  119. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/profile.yml +0 -0
  120. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/01_enqueue.sql +0 -0
  121. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/02_dequeue.sql +0 -0
  122. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/03_settle.sql +0 -0
  123. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/queue_skip_locked/sql/queue-schema.sql +0 -0
  124. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/README.md +0 -0
  125. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/generator.py +0 -0
  126. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/profile.yml +0 -0
  127. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/01_workload.sql +0 -0
  128. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/indexes.sql +0 -0
  129. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock/sql/stock-schema.sql +0 -0
  130. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/README.md +0 -0
  131. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/generator.py +0 -0
  132. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/profile.yml +0 -0
  133. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/indexes.sql +0 -0
  134. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/profiles/simple_stock_spec_symbols/sql/stock-schema.sql +0 -0
  135. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/bundled/schema/pg_workload-v1.schema.json +0 -0
  136. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/common.py +0 -0
  137. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/config.py +0 -0
  138. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/logging.py +0 -0
  139. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/pg_client.py +0 -0
  140. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/profiles.py +0 -0
  141. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/resources.py +0 -0
  142. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/runner.py +0 -0
  143. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/scheduler.py +0 -0
  144. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload/state.py +0 -0
  145. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/dependency_links.txt +0 -0
  146. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/entry_points.txt +0 -0
  147. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/requires.txt +0 -0
  148. {pg_workload-0.5.0 → pg_workload-0.6.2}/src/pg_workload.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pg-workload
3
- Version: 0.5.0
3
+ Version: 0.6.2
4
4
  Summary: PostgreSQL workload emulator for diagnostic and observability testing
5
5
  Author-email: O2eg <oleg.ispu@gmail.com>
6
6
  License-Expression: MIT
@@ -229,7 +229,7 @@ Use `--bin-dir /path/to/postgresql/bin` when client binaries are outside
229
229
  | `simple_stock` | Write-heavy CRUD over related stock tables | synthetic Python generator |
230
230
  | `simple_stock_spec_symbols` | Identifier, Unicode, and parser edge cases | synthetic Python generator |
231
231
  | `imdb` | Movie-domain analytical joins and skew | synthetic Python generator |
232
- | `pagila` | Mixed Pagila OLTP | synthetic Python generator |
232
+ | `pagila` | Pagila OLTP with a 50/25/20/5 script mix | synthetic Python generator |
233
233
  | `many_objects` | Metadata-heavy schemas and partitions | scale-aware SQL object creation |
234
234
  | `emulate_errors` | Intentional SQL errors | SQL seed rows only |
235
235
  | `pss_overflow` | `pg_stat_statements` churn | scaled Python generator; extension/preload required |
@@ -384,6 +384,14 @@ to `psql`, so generated rows never pass through repository files. Because a loca
384
384
  generator can execute arbitrary code with the runner account, only run profiles from a trusted
385
385
  project directory.
386
386
 
387
+ `pagila` and `imdb` use the generators and SQL from `pg_perf_bench` v0.6.1, adapted for
388
+ scheduled workloads. Their local `pg_workload.initialization` loader commits bounded data
389
+ batches (100,000 rows by default), then creates indexes and constraints and analyzes every
390
+ table. It uses the selected `psql` and keeps normal durability settings. These two generators
391
+ also accept `--batch-rows N` when called directly; changing batch size preserves generated
392
+ values (apart from wall-clock `last_update` timestamps). Failed initialization stops the
393
+ command; reinstall the profile to recreate its schema and retry.
394
+
387
395
  ## Desired-state scheduler
388
396
 
389
397
  The scheduler runs in the foreground and owns only its child workload processes. It does not
@@ -190,7 +190,7 @@ Use `--bin-dir /path/to/postgresql/bin` when client binaries are outside
190
190
  | `simple_stock` | Write-heavy CRUD over related stock tables | synthetic Python generator |
191
191
  | `simple_stock_spec_symbols` | Identifier, Unicode, and parser edge cases | synthetic Python generator |
192
192
  | `imdb` | Movie-domain analytical joins and skew | synthetic Python generator |
193
- | `pagila` | Mixed Pagila OLTP | synthetic Python generator |
193
+ | `pagila` | Pagila OLTP with a 50/25/20/5 script mix | synthetic Python generator |
194
194
  | `many_objects` | Metadata-heavy schemas and partitions | scale-aware SQL object creation |
195
195
  | `emulate_errors` | Intentional SQL errors | SQL seed rows only |
196
196
  | `pss_overflow` | `pg_stat_statements` churn | scaled Python generator; extension/preload required |
@@ -345,6 +345,14 @@ to `psql`, so generated rows never pass through repository files. Because a loca
345
345
  generator can execute arbitrary code with the runner account, only run profiles from a trusted
346
346
  project directory.
347
347
 
348
+ `pagila` and `imdb` use the generators and SQL from `pg_perf_bench` v0.6.1, adapted for
349
+ scheduled workloads. Their local `pg_workload.initialization` loader commits bounded data
350
+ batches (100,000 rows by default), then creates indexes and constraints and analyzes every
351
+ table. It uses the selected `psql` and keeps normal durability settings. These two generators
352
+ also accept `--batch-rows N` when called directly; changing batch size preserves generated
353
+ values (apart from wall-clock `last_update` timestamps). Failed initialization stops the
354
+ command; reinstall the profile to recreate its schema and retry.
355
+
348
356
  ## Desired-state scheduler
349
357
 
350
358
  The scheduler runs in the foreground and owns only its child workload processes. It does not
@@ -33,3 +33,32 @@ The bundled `imdb` profile includes SQL query shapes migrated and adapted from
33
33
  the predecessor `pg_workload_generator` implementation. Its data generator is
34
34
  local and deterministic. No source IMDB dataset, CSV archive, or downloaded row
35
35
  data is included in the source distribution or wheel.
36
+
37
+ ## pg_perf_bench profile sources
38
+
39
+ The Pagila and IMDb schemas, load plans, index/constraint definitions and workload SQL
40
+ are adapted from `pg_perf_bench` v0.6.1, commit
41
+ `5eec23ce4c0edf3001bdbdb70339406221a3c903`, <https://github.com/O2eg/pg_perf_bench>.
42
+ The psql loader and scheduled-run adaptations are maintained in pg_workload.
43
+
44
+ MIT License
45
+
46
+ Copyright (c) 2023 Tantor Labs
47
+
48
+ Permission is hereby granted, free of charge, to any person obtaining a copy
49
+ of this software and associated documentation files (the "Software"), to deal
50
+ in the Software without restriction, including without limitation the rights
51
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
52
+ copies of the Software, and to permit persons to whom the Software is
53
+ furnished to do so, subject to the following conditions:
54
+
55
+ The above copyright notice and this permission notice shall be included in all
56
+ copies or substantial portions of the Software.
57
+
58
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
59
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
60
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
61
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
62
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
63
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
64
+ SOFTWARE.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pg-workload"
7
- version = "0.5.0"
7
+ version = "0.6.2"
8
8
  description = "PostgreSQL workload emulator for diagnostic and observability testing"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  """PostgreSQL workload generation and scheduling tools."""
2
2
 
3
- __version__ = "0.5.0"
3
+ __version__ = "0.6.2"
4
4
 
5
5
  from pg_workload.assets import bundled_profiles_root, initialize_project
6
6
  from pg_workload.cli import build_parser
@@ -50,6 +50,9 @@ def _copy_tree(source_root: Path, destination_root: Path, *, force: bool) -> dic
50
50
  destination_root.mkdir(parents=True, exist_ok=True)
51
51
  for source in sorted(source_root.rglob("*")):
52
52
  relative = source.relative_to(source_root)
53
+ # Bytecode caches are interpreter by-products of the installation, not assets.
54
+ if "__pycache__" in relative.parts:
55
+ continue
53
56
  destination = destination_root / relative
54
57
  if source.is_symlink():
55
58
  raise WorkloadError(f"Bundled asset must not be a symlink: {source}")
@@ -6,6 +6,10 @@ It is a workload generator rather than a benchmark: the goal is to keep PostgreS
6
6
  produce varied plans and statistics for `auto_explain`, `pg_stat_statements`, and DBA tooling.
7
7
  No IMDB source rows, CSV files, archives, or network downloads are required.
8
8
 
9
+ The schema, generator and all 38 SQL scripts come from `pg_perf_bench` v0.6.1
10
+ (commit `5eec23ce4c0edf3001bdbdb70339406221a3c903`), with a local psql loader.
11
+ The workload queries are unchanged.
12
+
9
13
  ## Objects (at scale 1)
10
14
 
11
15
  - The full 21-table relational shape used by the earlier profile, including alternate names and
@@ -15,8 +19,13 @@ No IMDB source rows, CSV files, archives, or network downloads are required.
15
19
  2 million fact, relationship, and attribute rows.
16
20
  - Deterministic synthetic anchor rows cover the names, years, countries, notes, roles, keywords,
17
21
  genres, ratings, and link types selected by every bundled query family.
18
- - Foreign-key/join-column and selective-filter indexes are created after loading, followed by
19
- `ANALYZE` for all 21 tables.
22
+ - Independent deterministic hash streams choose participants, companies, keywords and
23
+ attribute types/values, avoiding cyclic correlations between a film and its relationships.
24
+ - Identifiers are bigint. The local loader recreates the schema and commits bounded data
25
+ batches, then builds primary keys, join/filter indexes and constraints and runs `ANALYZE`
26
+ on all 21 tables. It preserves normal logging and server durability settings.
27
+ - The generator accepts `--batch-rows` (default 100,000); batch size does not change the data.
28
+ After a loading failure, reinstall the profile to recreate its schema and retry.
20
29
 
21
30
  ## Jobs
22
31