You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
build and load the tar.zst artifact (MANIFEST with checksums + runtime config)
pgpkg.api
public facade
pgpkg.cli
argparse CLI, psql-compatible DB flags
pgpkg.wrapper
scaffold a wrapper Python project
Invariants
The installed version comes from the configured version source. By default
that is pgpkg.migrations, but projects can relocate the table or provide a
custom module:attribute implementation.
sql/ is always "unreleased". Staging it writes an immutable base file.
Every applied step runs inside one transaction with a project-scoped
advisory lock (pg_advisory_xact_lock(sha256(project_name)[:8])).
sql/pre/* runs before every step; sql/post/* runs after. Together
they form the project's public boundary for side effects (roles, grants,
GUCs).
Tracking writes always run as the original session user, even if migration
SQL temporarily changes the active role.
Artifacts preserve runtime tracking defaults so wrapper and bundle-based
execution see the same config as source-tree execution.
What pgpkg deliberately does not do
No schema adoption (no "adopt an already-installed schema as a version"
flow). If a DB was seeded out-of-band, you're responsible for inserting
the right row into the configured tracking source.
No downgrades, no per-version sql/<version>/ tree, no built-in
pg_tle/control/deb/PGXN packaging.
No generic wrapper generation for projects with custom version sources.
Those projects need a project-specific wrapper so they can construct and
pass the runtime version_source object explicitly.