PostgreSQL Fix Velocity — Git Commits
Codebase size — file classes:
source_c, header, sql, perl, python, grammar, docs, embedded_sql
Composition — file classes:
source_c, header, sql, perl, python, grammar, docs, embedded_sql
Stable churn — file classes:
source_c, header, sql, perl, python, grammar, docs, embedded_sql
Trunk 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 Quarter
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
Q3
2021
Q4
Q1
2022
Q2
Q3
Q4
Q1
2023
Q2
Q3
Q4
Q1
2024
Q2
Q3
Q4
Q1
2025
Q2
Q3
Q4
Q1
2026
Q2
Q3
0
50
100
150
200
distinct fix commits
Each 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 2025
Fix Commits per Non-Master Branch per Quarter
Each 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 2025
Q3
2021
Q4
Q1
2022
Q2
Q3
Q4
Q1
2023
Q2
Q3
Q4
Q1
2024
Q2
Q3
Q4
Q1
2025
Q2
Q3
Q4
Q1
2026
Q2
Q3
0
200
400
fix commits
REL_14_STABLE
REL_15_STABLE
REL_16_STABLE
REL_17_STABLE
REL_18_STABLE
REL_19_STABLE
Stable-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) on
Fix Commits per Released Version
Stable-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) on
Major
PG14
PG15
PG16
PG17
PG18
0
200
400
600
800
fix commits
Nov 21
Feb 22
May 22
Jun 22
Aug 22
Nov 22
Feb 23
May 23
Aug 23
Nov 23
Feb 24
May 24
Aug 24
Nov 24
Feb 25
May 25
Aug 25
Nov 25
Feb 26
May 26
Aug 26
Total 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 Major
Total 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)
Oct
2021
Jan
2022
Apr
Jul
Oct
Jan
2023
Apr
Jul
Oct
Jan
2024
Apr
Jul
Oct
Jan
2025
Apr
Jul
Oct
Jan
2026
Apr
Jul
2,000k
2,200k
2,400k
source lines
PG19
PG18
PG17
PG16
PG15
PG14
Latest 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, docs
Codebase Composition by Subsystem
Latest 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, docs
Subsystem
core_server
docs
client_tools
extensions_contrib
tests
replication_recovery
planner
build_platform
other
0
1mn
2mn
source lines
PG14
PG15
PG16
PG17
PG18
PG19
One backpatch per fix, its largest (housekeeping excluded); total churn, additions, and deletions -- work per fix, not per branch; current quarter partial
Lines of Code Churned per Quarter
One backpatch per fix, its largest (housekeeping excluded); total churn, additions, and deletions -- work per fix, not per branch; current quarter partial
Q3
2021
Q4
Q1
2022
Q2
Q3
Q4
Q1
2023
Q2
Q3
Q4
Q1
2024
Q2
Q3
Q4
Q1
2025
Q2
Q3
Q4
Q1
2026
Q2
Q3
0
10,000
20,000
lines changed
lines deleted
lines added
total 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 partial
Backpatch Breadth per Quarter
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 partial
Q3
2021
Q4
Q1
2022
Q2
Q3
Q4
Q1
2023
Q2
Q3
Q4
Q1
2024
Q2
Q3
Q4
Q1
2025
Q2
Q3
Q4
Q1
2026
Q2
Q3
1
2
3
branches per fix
branches per fix
Lines churned on master (feature development), split by subsystem — where the work is happening; master only so no backpatch multiplication; current quarter partial
Trunk Churn by Subsystem per Quarter
Lines churned on master (feature development), split by subsystem — where the work is happening; master only so no backpatch multiplication; current quarter partial
Q2
2020
Q3
Q4
Q1
2021
Q2
Q3
Q4
Q1
2022
Q2
Q3
Q4
Q1
2023
Q2
Q3
Q4
Q1
2024
Q2
Q3
Q4
Q1
2025
Q2
Q3
Q4
Q1
2026
Q2
Q3
0
50
100
150
200K
lines changed
core_server
docs
tests
client_tools
replication_recovery
extensions_contrib
planner
build_platform
other
A vendor and a work role, reviewed by hand; zero before 2026, accelerating since the Aug 2026 wrap
Fix Commits Disclosing AI Involvement
A vendor and a work role, reviewed by hand; zero before 2026, accelerating since the Aug 2026 wrap
AI-involved fix commits
Q2
2026
Q3
0
5
10
15
Role mentions per fix commit: found / analyzed / wrote the code / built a tool (a fix can carry several)
What the AI Did, per Quarter
Role mentions per fix commit: found / analyzed / wrote the code / built a tool (a
fix can carry several)
Q2
2026
Q3
0
5
10
15
20
analyzed it
wrote the code
found 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 cycle
Release-Cycle Pace, Like for Like
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 cycle
first 32 days
full cycle
Aug 21
Nov 21
Feb 22
May 22
Aug 22
Nov 22
Feb 23
May 23
Aug 23
Nov 23
Feb 24
May 24
Aug 24
Nov 24
Feb 25
May 25
Aug 25
Nov 25
Feb 26
May 26
Aug 26
0
100
200
distinct fix commits
AI-involved Fix Commits
Commit dt
Subject
Roles
Vendor
Form
Label
source
Evidence
28 Aug 2026
Perform join removal by editing the query's jointree.
authored
anthropic
prose
review
mentions: Claude Opus 4.8 | authored: initial drafts of this patch were made with
Claude Opus 4.8
26 Aug 2026
Export subxip[] for snapshots taken during recovery.
found + analyzed
anthropic
prose
review
mentions: Claude Code | analyzed: Claude Code diagnosed this problem |
authored: The committed TAP test is a simplified version of the one that it wrote
to demonstrate this bug
22 Aug 2026
Fix GIN posting tree page deletion with incomplete
splits.
found + authored
anthropic
prose
review
mentions: Claude Code found this problem | found: Claude Code found this
problem | authored: The committed test case is a simplified version of the one
that it wrote to demonstrate this bug
18 Aug 2026
Defend against null "SV *" pointers in plperl modules.
found
anthropic
trailer
review
mentions: Claude Code found the instance in hstore_plperl / Reported-by: Claude
Code (via Noah Misch) | found: Claude Code found the instance in hstore_plperl
17 Aug 2026
Doc: clean up documentation about text search
datatype limits.
found
anthropic
trailer
review
mentions: Claude Code
17 Aug 2026
Make plperl's handling of Perl arrays safer and more
consistent.
found
anthropic
trailer
review
mentions: Claude Code | found: Reported-by: Claude Code (via Noah Misch)
17 Aug 2026
Tighten up tsqueryrecv().
found
anthropic
trailer
review
mentions: Claude Code
10 Aug 2026
Avoid overflow in Levenshtein distance calculations.
found + analyzed
anthropic
trailer
review
mentions: Claude and Anthropic Research | found: Reported-by: Ben Morris in
collaboration with Claude and Anthropic Research
10 Aug 2026
Cross-check the type of a portal running EXECUTE or
FETCH.
found
anthropic
trailer
review
mentions: Claude and Anthropic Research | found: Reported-by: Ben Morris in
collaboration with Claude and Anthropic Research
10 Aug 2026
Fix multirange type handling in
pg_restore_attribute_stats()
authored
openai
trailer
review
mentions: Author: OpenAI Security Research Team
10 Aug 2026
Guard against overlength time zone abbreviations in
to_char().
found
openai
trailer
review
mentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAI
Codex Security)
10 Aug 2026
Obstruct EXTRACT() field name deparse injection.
found
anthropic
trailer
review
mentions: Claude and Anthropic Research | found: Reported-by: Ben Morris in
collaboration with Claude and Anthropic Research
10 Aug 2026
Reject calls from SQL to functions that take or return
type internal.
found
openai
trailer
review
mentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAI
Codex Security)
10 Aug 2026
Return nulls honestly in aggregate "combine"
functions.
found
openai
trailer
review
mentions: OpenAI Codex Security | found: Reported-by: Amy Burnett (OpenAI
Codex Security)
10 Aug 2026
Use explicit fetching for digests in cryptohash
(OpenSSL >= 3.0)
authored
unspecified
prose
review
mentions: 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 bit
27 Jul 2026
Deparse FOR PORTION OF using the range column's
current name.
authored
anthropic
prose
review
mentions: Claude Opus 4.8 | authored: an earlier draft of this patch was made
with Claude Opus 4.8
22 Jul 2026
walsummarizer: Guard against WAL files whose tail
ends are not valid.
analyzed
anthropic
trailer
review
mentions: using claude | analyzed: Analyzed-by: Thom Brown <thom@linux.com>
(using claude)
28 Jun 2026
doc: Improve consistency in varlistentry attributes
found
anthropic
prose
review
mentions: Claude | found: Inconsistencies found using Claude
11 May 2026
Avoid passing unintended format codes to snprintf().
found
other
trailer
review
mentions: Xint Code | found: Reported-by: Xint Code
11 May 2026
Fix assorted places that need to use palloc_array().
found
other
trailer
review
mentions: Xint Code | found: Reported-by: Xint Code
1–20 / 29
‹
1
2
›
When commits land across the 24h UTC day (committer timestamp, all commits) — round-the-clock from a global contributor base, peaking mid/late-afternoon UTC
2020
2021
2022
2023
2024
2025
2026
0
100
200
300
0
100
200
300
0
100
200
300
0
100
200
300
0
100
200
300
0
100
200
300
0
100
200
300
0
5
10
15
20
hour of day (UTC)
Commits by Hour of Day (UTC)
When commits land across the 24h UTC day (committer timestamp, all commits) — round-the-clock
from 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 with
dbt Charts