mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-07-29 15:24:54 +00:00
Adds standalone profiling tooling (never merged into dev/main): a persistent, self-healing Postgres 18 container helper (run_with_postgres.sh/stop_postgres.sh), a scale-profile dataset seeder (seed.py) whose document counts and guardian permission-row ratios mirror real bug reports (#13276, #13161), and a typed profiling harness (harness.py) for timing/query-count comparisons and EXPLAIN ANALYZE capture, gated by require_postgres() so it never silently runs on SQLite. seed.py samples distinct (subject, document) pairs up front rather than drawing with replacement, since guardian's assign_perm() dedupes on the (subject, object, permission) triple -- with-replacement sampling against a small group pool collides heavily (birthday paradox) and undercounts the target permission-row ratios otherwise.
25 lines
957 B
Bash
Executable File
25 lines
957 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# profiling/stop_postgres.sh
|
|
#
|
|
# Explicit, manual teardown of the profiling Postgres container. Not called
|
|
# automatically by run_with_postgres.sh -- run this yourself once you're
|
|
# done with a profiling session, so a seeded `large`-scale dataset can be
|
|
# reused across several script runs first. Terminates any active backends
|
|
# before stopping, so a stuck query can't stall `docker stop` waiting for
|
|
# a graceful Postgres shutdown that never comes.
|
|
set -euo pipefail
|
|
|
|
CONTAINER_NAME="pngx-profiling-pg"
|
|
|
|
if docker inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
|
|
docker exec "$CONTAINER_NAME" psql -U paperless -d paperless -v ON_ERROR_STOP=0 -c "
|
|
SELECT pg_terminate_backend(pid)
|
|
FROM pg_stat_activity
|
|
WHERE pid <> pg_backend_pid();
|
|
" >/dev/null 2>&1 || true
|
|
docker stop "$CONTAINER_NAME" >/dev/null
|
|
echo "Stopped and removed profiling Postgres container."
|
|
else
|
|
echo "No profiling Postgres container was running."
|
|
fi
|