## 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--.sql` - [ ] `PG_FUNCTION_INFO_V1` names in C match the `AS '', ''` 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 ```sh # 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----.sql` migration script (if applicable) - [ ] `CHANGELOG.md` has a heading for the new version ## Backward compatibility ## Screenshots / sample output ``` ``` ## Additional notes