{
    "archive_path": "archive/1792447629.260213",
    "base_url": "peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves",
    "basename": "the-reverts-will-continue-until-morale-improves",
    "bookmarked_date": "2026-10-19 22:07",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=peter.eisentraut.org",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves.html"
    },
    "domain": "peter.eisentraut.org",
    "extension": "",
    "hash": "15ZJC7WBYR6F66GJ3H4P",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=peter.eisentraut.org"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-19T22:09:33.360149+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:32.819119+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-19T22:09:33.554383+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:33.368614+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-10-19T22:09:38.215869+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:35.414885+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpvdslg328",
                    "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-10-19T22:09:35.405961+00:00",
                "index_texts": [
                    "Many readers will be aware that an unusually high number of features\nhave been reverted from the PostgreSQL 19 branch after the beta period\nbegan.  Having some reverts is not unusual, maybe one per cycle could\nbe expected.  But this time around, about 8 to 10 significant\nfeatures, depending on how you count, have been reverted, and some of\nthem quite late in the beta period.  I have been on the receiving end\nof some of that, as the developer or committer of some of those\nfeatures, and have gotten some questions about it, and so I want to\ntake a moment to reflect on this.  I\u2019ll try to extrapolate a little\nbit to similarly affected work that I was not actively involved in,\nbut these are just my opinions at this point.\n\nSo what happened?\n\nI don\u2019t think we, meaning all the developers affected, have had enough\ntime to fully reflect on all this.  But here are some thoughts.  It\u2019s\nprobably a combination of these, and a different combination in the\ncase of each reverted feature.\n\n\n  \n    Maybe we just didn\u2019t do a good enough job.  Maybe the code was just\nnot good enough.  We\u2019ll learn and improve.  It\u2019s probably some of\nthat, and I\u2019m mentioning it here to not give the impression that it\nwas only the other factors that I\u2019m going to mention.\n  \n  \n    It could also be a coincidence.  Maybe we had been on such a good\nroll that we attempted to tackle several features that turned out to\nbe too hard, or at least too hard to finish in time.\n  \n  \n    Some of the reverted features had significant architectural defects\nthat would have been hard to fix quickly and during beta.  But there\nwas also a long tail of relatively harmless issues involving various\nedge cases.  In past times, many of these would not have surfaced\nuntil much later and we would have fixed them bit by bit over the\nsubsequent five years.  But with LLM-assisted code review, these\nkinds of things can get found much faster, and then you\u2019re staring\nat a list of like forty defect reports.  And even if each of them\nrequires only a three-line fix on average, there is a fixed overhead\nto dealing with each of these, and then you run out of time.  Most\nif not all of the affected reverted features were written a long\ntime ago when LLM-assisted code review was not as useful as it is\nnow, meaning that the effective quality bar has been raised after\nthe time the feature was written and committed.  Unless the\ncapabilities of LLM-assisted code review keep improving at the\ncurrent rate, this situation should sort itself out for future\ndevelopment cycles.\n  \n  \n    A corollary of that is that, at least for the most part, as far as I\ncan tell, this situation is not due to \u201cvibe coding\u201d.  This code\nwas written well before that was a possibility.\n  \n  \n    Because of the Vulnpocalypse, many senior developers were busy\nbetween, say, April (the start of feature freeze for PostgreSQL 19,\nand also the start of the Vulnpocalypse) and August (the most recent\nPostgreSQL security release) with working on fixes for security\nissues.  Because of that, the usual additional review and testing\nthat happens during the beta period was reduced, and then picked up\nagain in August.  That\u2019s possibly why a lot of new issues were\ndiscovered quite late in the beta period and why so many reverts\nhappened so late, which is what made all of this so notable.  Again,\nsome issues were more fundamental but there was also a long tail of\nsmaller issues, and I feel with more time, say, two months, these\ncould have been addressed (given adequate focus, but note that the\nVulnpocalypse is ongoing).  But the community preferred trying to\nstick to the release schedule rather than delaying to get more fixes\nin.  (And you never know how long a long tail really is.)\n  \n  \n    The complexity of the system has made some kinds of features\nextremely complex to get right, and there is not enough scaffolding\nin the code to support that.  Consider, as an abstracted example,\nsome SQL-level query language feature.  Does it work with domains?\nHow about with domains over a composite type?  Where one of the\nfields is also a domain?  And the domain has a not null constraint?\nAnd one of the columns was dropped and re-added?  And this is part\nof a table partition that has been detached and reattached with a\ndifferent column order?  And this is part of a view that is called\nfrom a security-definer function from a trigger?  And so on.  No one\ncan manually test this or even enumerate these test cases.  But\nLLM-assisted fuzzing can find problems with this really quickly.  So\nthis probably needs to be part of feature development in the future.\nBut we should also think about making the internal interfaces more\nrobust so that each different combination of contexts doesn\u2019t open\nup so many new possibilities of interactions.\n\n    I like to say, in PostgreSQL, \u201ceverything works with everything\u201d.\nThis is part of the appeal, that you can construct cases like this\nand expect them to work.  I don\u2019t want to give up on that at all.\nBut it does impose a significant penalty on feature development that\neveryone needs to be aware of.\n  \n  \n    As a final point, the PostgreSQL development community has been\ncontemplating for some time the possibility of committing features\nwith some kind of \u201cexperimental\u201d status and then maturing them in\nthe main tree.  This would also be one possibility to address the\nprevious point.  This would have been a helpful tool for at least\nsome of the reverted features, but we haven\u2019t yet figured out a way\nto do this, and some of the work suffered from misunderstandings\nrelated to this.  This is a concrete point to work on.\n  \n\n\nSo what\u2019s next?\n\nFirst of all, from my personal perspective, thank you to everyone who\nhas reached out in person or online to express support and\nencouragement.  That\u2019s the most important thing.  I\u2019m confident that\nmany of the reverted features will come back before too long.\n\nPostgreSQL 19 will still be a great release.  REPACK CONCURRENTLY,\nlogical replication of sequences (itself a previously reverted\nfeature), and planner hinting with pg_plan_advice, just to pick a few\nheadline items, will make this release very attractive.  And it will\nbe very robust, after all the additional scrutiny.\n\nIt\u2019s difficult to predict things now.  A few months ago I said,\nPostgreSQL 20 might have no new features, just bug fixes.  It turned\nout that things moved even faster, and PostgreSQL 19 now, kind of, has\nhalf as many major features as then expected, but now we also already\nhave a few nice 80%-ready features queued up for PostgreSQL 20 that\njust need those remaining 80% to get done!"
                ],
                "output": "readability",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:33.858198+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-19T22:09:33.852119+00:00",
                "index_texts": null,
                "output": "The reverts will continue until morale improves | Peter Eisentraut",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:33.835162+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--reject=js,mjs,woff,woff2,ttf,otf,eot,mp4,m4v,mov,webm,ogv,mkv,avi,flv",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "--timestamping",
                    "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-10-19T22:09:33.828777+00:00",
                "index_texts": null,
                "output": "peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves.html",
                "pwd": "/data/archive/1792447629.260213",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-19T22:09:33.561897+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "The reverts will continue until morale improves | Peter Eisentraut",
        "warc": null,
        "wget": "peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves.html"
    },
    "link_dir": "/data/archive/1792447629.260213",
    "newest_archive_date": "2026-10-19T22:09:35.414885+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-10-19T22:09:32.819119+00:00",
    "path": "/blog/2026/10/09/the-reverts-will-continue-until-morale-improves",
    "schema": "Link",
    "scheme": "http",
    "snapshot_id": "ed78cbc0-8c0d-4a6f-a404-41fc7c2d2a30",
    "sources": [
        "/data/sources/1792447629-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1792447629.260213",
    "title": "The reverts will continue until morale improves | Peter Eisentraut",
    "updated": "2026-10-19T22:09:32.817042+00:00",
    "updated_date": "2026-10-19 22:09",
    "url": "http://peter.eisentraut.org/blog/2026/10/09/the-reverts-will-continue-until-morale-improves"
}