Summary

Closes #

Type of change

  • [ ] ๐Ÿ› Bug fix (non-breaking change that fixes an issue)
  • [ ] โœจ New feature (non-breaking change that adds functionality)
  • [ ] ๐Ÿ’ฅ Breaking change (fix or feature that changes existing behavior)
  • [ ] ๐Ÿ—๏ธ Refactor / internal cleanup (no functional change)
  • [ ] โšก Performance improvement
  • [ ] ๐Ÿ“– Documentation only
  • [ ] ๐Ÿ”ง Build / CI / tooling
  • [ ] ๐Ÿงช Test-only change

Description of changes

Database / SQL changes

  • [ ] New or modified SQL functions are declared in sql/pgclone--<version>.sql
  • [ ] PG_FUNCTION_INFO_V1 names in C match the AS '<lib>', '<sym>' clauses in SQL
  • [ ] Return types in .sql match the C PG_RETURN_* paths
  • [ ] COMMENT ON FUNCTION ... added for new public functions
  • [ ] Function volatility (VOLATILE / STABLE / IMMUTABLE) and PARALLEL safety set correctly

Testing

PostgreSQL versions tested locally:

  • [ ] pgTAP tests added or updated in test/pgclone_test.sql
  • [ ] plan() count exactly matches the actual number of assertions
  • [ ] Shell tests added/updated in test/test_async.sh or test/test_database_create.sh (if applicable)
  • [ ] test/fixtures/seed.sql updated if new test objects are needed
  • [ ] CI is green on all of PG 14, 15, 16, 17, 18
# Output of pre_deploy_checks.sh (paste the summary line)
# e.g. "22 passed, 0 failed"

C code safety checklist

  • [ ] palloc / palloc0 / pfree only โ€” no malloc/free
  • [ ] Every PQconnectdb has a matching PQfinish in all paths (success and error)
  • [ ] Every PQexec result is PQclear-ed in all paths
  • [ ] Dynamic SQL uses quote_literal_cstr() and quote_identifier()
  • [ ] StringInfo used for dynamic strings; no fixed stack buffers for SQL
  • [ ] strlcpy instead of strcpy / strncpy
  • [ ] ereport / elog with appropriate level โ€” connection strings never logged at LOG level or above
  • [ ] PG-version-specific APIs are guarded with #if PG_VERSION_NUM >= XXXXXX
  • [ ] No new uses of removed APIs (d.adsrc, pre-PG15 shmem-request pattern, etc.)
  • [ ] Shared-memory state protected by LWLock where needed

Documentation

  • [ ] CHANGELOG.md updated under the appropriate version heading
  • [ ] Relevant doc updated: docs/USAGE.md / docs/ASYNC.md / docs/ARCHITECTURE.md / docs/TESTING.md
  • [ ] README.md updated if the change affects the user-facing feature list or quick-start

Version bump

  • [ ] pgclone.control (default_version)
  • [ ] META.json (version and provides.pgclone.version + file)
  • [ ] README.md version badge
  • [ ] New sql/pgclone--<old>--<new>.sql migration script (if applicable)
  • [ ] CHANGELOG.md has a heading for the new version

Backward compatibility

Screenshots / sample output

Additional notes