PostgreSQL Fix Velocity — Git Commits Codebase size — file classes:source_c, header, sql, perl, python, grammar, docs, embedded_sqlComposition — file classes:source_c, header, sql, perl, python, grammar, docs, embedded_sqlStable churn — file classes:source_c, header, sql, perl, python, grammar, docs, embedded_sqlTrunk churn — file classes:source_c, header, sql, perl, python, grammar, docs, embedded_sql Git commits on the released majors' stable branches, deduplicated by subject across branches (housekeeping excluded) — a superset of the Changelog's documented fixes (~2x); calendar quarters, current one partial Distinct Fix Commits per QuarterGit commits on the released majors' stable branches, deduplicated by subject across branches (housekeeping excluded) — a superset of the Changelog's documented fixes (~2x); calendar quarters, current onepartialdistinct fix commitsQ32021Q4Q12022Q2Q3Q4Q12023Q2Q3Q4Q12024Q2Q3Q4Q12025Q2Q3Q4Q12026Q2Q3050100150200distinct fix commitsEach branch counts its own backpatches, so one fix landed on every stable major is one commit per branch here. Read each line on its own, not their sum: branches enter the corpus as majors ship, so all five are present only from Q3 2025Fix Commits per Non-Master Branch per QuarterEach branch counts its own backpatches, so one fix landed on every stable major is one commit per branch here. Read each line on its own, not their sum: branches enter the corpus asmajors ship, so all five are present only from Q3 2025Q32021Q4Q12022Q2Q3Q4Q12023Q2Q3Q4Q12024Q2Q3Q4Q12025Q2Q3Q4Q12026Q2Q30200400fix commitsREL_14_STABLEREL_15_STABLEREL_16_STABLEREL_17_STABLEREL_18_STABLEREL_19_STABLEStable-branch fix commits (housekeeping excluded) binned by the release they shipped in, split by major; shipped releases only. Bar height grows a layer per major entering the corpus -- comparable from Nov 2025 (five majors) onFix Commits per Released VersionStable-branch fix commits (housekeeping excluded) binned by the release they shipped in, split by major; shipped releases only. Bar height grows a layer per major entering the corpus -- comparable from Nov2025 (five majors) onMajorPG14PG15PG16PG17PG180200400600800fix commitsNov 21Feb 22May 22Jun 22Aug 22Nov 22Feb 23May 23Aug 23Nov 23Feb 24May 24Aug 24Nov 24Feb 25May 25Aug 25Nov 25Feb 26May 26Aug 26Total source lines per stable branch, sampled weekly (git grep at the branch HEAD); one line per major — never summed across majors (parallel copies of the same tree)Codebase Size Over Time, by MajorTotal source lines per stable branch, sampled weekly (git grep at the branch HEAD); one line per major — never summed across majors (parallel copies of the same tree)Oct2021Jan2022AprJulOctJan2023AprJulOctJan2024AprJulOctJan2025AprJulOctJan2026AprJul2,000k2,200k2,400ksource linesPG19PG18PG17PG16PG15PG14Latest weekly snapshot of each major's tree, split into subsystems (subsystem_rules); the step up between majors resolves into which areas grew — core server, tests, new contrib extensions, docsCodebase Composition by SubsystemLatest weekly snapshot of each major's tree, split into subsystems (subsystem_rules); the step up between majors resolves into which areas grew — core server, tests, new contrib extensions, docsSubsystemcore_serverdocsclient_toolsextensions_contribtestsreplication_recoveryplannerbuild_platformother01mn2mnsource linesPG14PG15PG16PG17PG18PG19One backpatch per fix, its largest (housekeeping excluded); total churn, additions, and deletions -- work per fix, not per branch; current quarter partialLines of Code Churned per QuarterOne backpatch per fix, its largest (housekeeping excluded); total churn, additions, and deletions -- work per fix, not per branch; current quarter partialQ32021Q4Q12022Q2Q3Q4Q12023Q2Q3Q4Q12024Q2Q3Q4Q12025Q2Q3Q4Q12026Q2Q3010,00020,000lines changedlines deletedlines addedtotal churn (adds + deletes)Stable-branch fix commits per distinct fix. Rises with the corpus (one branch in 2021, five since mid-2025), not the project -- the multiplier behind per-branch counts; current quarter partialBackpatch Breadth per QuarterStable-branch fix commits per distinct fix. Rises with the corpus (one branch in 2021, five since mid-2025), not the project -- the multiplier behind per-branch counts; current quarter partialQ32021Q4Q12022Q2Q3Q4Q12023Q2Q3Q4Q12024Q2Q3Q4Q12025Q2Q3Q4Q12026Q2Q3123branches per fixbranches per fixLines churned on master (feature development), split by subsystem — where the work is happening; master only so no backpatch multiplication; current quarter partialTrunk Churn by Subsystem per QuarterLines churned on master (feature development), split by subsystem — where the work is happening; master only so no backpatch multiplication; current quarter partialQ22020Q3Q4Q12021Q2Q3Q4Q12022Q2Q3Q4Q12023Q2Q3Q4Q12024Q2Q3Q4Q12025Q2Q3Q4Q12026Q2Q30   ​50   ​100   ​150   ​200Klines changedcore_serverdocstestsclient_toolsreplication_recoveryextensions_contribplannerbuild_platformother A vendor and a work role, reviewed by hand; zero before 2026, accelerating since the Aug 2026 wrapFix Commits Disclosing AI InvolvementA vendor and a work role, reviewed by hand; zero before 2026, accelerating since the Aug 2026 wrapAI-involved fix commitsQ22026Q3051015Role mentions per fix commit: found / analyzed / wrote the code / built a tool (a fix can carry several)What the AI Did, per QuarterRole mentions per fix commit: found / analyzed / wrote the code / built a tool (afix can carry several)Q22026Q305101520analyzed itwrote the codefound the bug Distinct stable-branch fix COMMITS queued in each cycle's first N days (N = the open cycle's age) vs its full-cycle total — per release cycleRelease-Cycle Pace, Like for LikeDistinct stable-branch fix COMMITS queued in each cycle's first N days (N = the open cycle's age) vs its full-cycle total — per release cyclefirst 32 daysfull cycleAug 21Nov 21Feb 22May 22Aug 22Nov 22Feb 23May 23Aug 23Nov 23Feb 24May 24Aug 24Nov 24Feb 25May 25Aug 25Nov 25Feb 26May 26Aug 260100200distinct fix commitsAI-involved Fix CommitsCommit dtSubjectRolesVendorFormLabelsourceEvidence28 Aug 2026Perform join removal by editing the query's jointree.authoredanthropicprosereviewmentions: Claude Opus 4.8 | authored: initial drafts of this patch were made withClaude Opus 4.826 Aug 2026Export subxip[] for snapshots taken during recovery.found + analyzedanthropicprosereviewmentions: Claude Code | analyzed: Claude Code diagnosed this problem |authored: The committed TAP test is a simplified version of the one that it wroteto demonstrate this bug22 Aug 2026Fix GIN posting tree page deletion with incompletesplits.found + authoredanthropicprosereviewmentions: Claude Code found this problem | found: Claude Code found thisproblem | authored: The committed test case is a simplified version of the onethat it wrote to demonstrate this bug18 Aug 2026Defend against null "SV *" pointers in plperl modules.foundanthropictrailerreviewmentions: Claude Code found the instance in hstore_plperl / Reported-by: ClaudeCode (via Noah Misch) | found: Claude Code found the instance in hstore_plperl17 Aug 2026Doc: clean up documentation about text searchdatatype limits.foundanthropictrailerreviewmentions: Claude Code17 Aug 2026Make plperl's handling of Perl arrays safer and moreconsistent.foundanthropictrailerreviewmentions: Claude Code | found: Reported-by: Claude Code (via Noah Misch)17 Aug 2026Tighten up tsqueryrecv().foundanthropictrailerreviewmentions: Claude Code10 Aug 2026Avoid overflow in Levenshtein distance calculations.found + analyzedanthropictrailerreviewmentions: Claude and Anthropic Research | found: Reported-by: Ben Morris incollaboration with Claude and Anthropic Research10 Aug 2026Cross-check the type of a portal running EXECUTE orFETCH.foundanthropictrailerreviewmentions: Claude and Anthropic Research | found: Reported-by: Ben Morris incollaboration with Claude and Anthropic Research10 Aug 2026Fix multirange type handling inpg_restore_attribute_stats()authoredopenaitrailerreviewmentions: Author: OpenAI Security Research Team10 Aug 2026Guard against overlength time zone abbreviations into_char().foundopenaitrailerreviewmentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAICodex Security)10 Aug 2026Obstruct EXTRACT() field name deparse injection.foundanthropictrailerreviewmentions: Claude and Anthropic Research | found: Reported-by: Ben Morris incollaboration with Claude and Anthropic Research10 Aug 2026Reject calls from SQL to functions that take or returntype internal.foundopenaitrailerreviewmentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAICodex Security)10 Aug 2026Return nulls honestly in aggregate "combine"functions.foundopenaitrailerreviewmentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAICodex Security)10 Aug 2026Use explicit fetching for digests in cryptohash(OpenSSL >= 3.0)authoredunspecifiedprosereviewmentions: Note: The submitted code was clearly AI-generated. I have spend a bit| authored: Note: The submitted code was clearly AI-generated. I have spend a bit27 Jul 2026Deparse FOR PORTION OF using the range column'scurrent name.authoredanthropicprosereviewmentions: Claude Opus 4.8 | authored: an earlier draft of this patch was madewith Claude Opus 4.822 Jul 2026walsummarizer: Guard against WAL files whose tailends are not valid.analyzedanthropictrailerreviewmentions: using claude | analyzed: Analyzed-by: Thom Brown <thom@linux.com>(using claude)28 Jun 2026doc: Improve consistency in varlistentry attributesfoundanthropicprosereviewmentions: Claude | found: Inconsistencies found using Claude11 May 2026Avoid passing unintended format codes to snprintf().foundothertrailerreviewmentions: Xint Code | found: Reported-by: Xint Code11 May 2026Fix assorted places that need to use palloc_array().foundothertrailerreviewmentions: Xint Code | found: Reported-by: Xint Code1–20 / 29‹12› When commits land across the 24h UTC day (committer timestamp, all commits) — round-the-clock from a global contributor base, peaking mid/late-afternoon UTC2020202120222023202420252026010020030001002003000100200300010020030001002003000100200300010020030005101520hour of day (UTC)Commits by Hour of Day (UTC)When commits land across the 24h UTC day (committer timestamp, all commits) — round-the-clockfrom a global contributor base, peaking mid/late-afternoon UTC 12:48 Mean commit time (UTC) 14:01 Median commit time (UTC) Data as of 21:42 UTC on 26 Oct 2026 made withdbt Charts