Looking Ahead to Postgres 19

(snowflake.com)

199 points | by thinkingemote 6 hours ago

17 comments

  • aljgz 5 hours ago
    I've used Postgres, Oracle, MsSql Server, and MySql in serious projects, no extensive experience with Sqlite, which I know is an amazing player.

    These days, I do myself a favor and always avoid Oracle and MySql/MariaDB.

    Postgres is amazing, and the two big things I wished it had:

    1. lightweight connection; connection bouncers improve the situation, but you still have an unreasonably high memory footprint per concurrent connection.

    2. Synchronously updated materialized views (Sql Server calls them indexed views). These are incredible tools in complex data situations. I saw a project struggle with complex technical implementations that would be elegant, trivial and always correct with indexed views.

    Sql Server can be costly, but in many cases the benefits it provides are totally worth the cost.

    Choosing the data store carefully prevents lots of future trouble.

    • bob1029 5 hours ago
      SQLite and MSSQL are my two solutions for relational storage problems.

      If I am going to use a "free" provider, SQLite is impossible to beat. They cover a majority of use cases today. SQLite starts to fall apart with backup, replication and tooling. If I am on the hook for things like system availability and disaster recovery, I don't have a problem spending money to cover my ass.

      If I am going to pay any amount of money at all, I am going all the way. The developer experience around MSSQL is untouchable. SSMS and VS with sql projects runs circles around contemporary entity framework crap. Sprinkle in 3rd party tools from vendors like RedGate and you can replace multi-million dollar consulting packages.

      I wouldn't ever advocate for standing up a new Oracle or DB2 machine, but if one was already in place I'd probably die on the hill of not trying to refactor it away. These databases typically come with multi-volume ghost stories attached. Reinventing all those weird effects on a new engine will typically kill the business if there are no other options available.

      • skeeter2020 4 hours ago
        >> The developer experience around MSSQL is untouchable.

        This may be the case for MS-centric, application & human developers, but I'm not convinced moving forward. Microsoft's BI story is pretty thin and out of date. Postgres has some solid columnar support/functions (which probably why Snowflake is writing about it) which means you can potentially use it for both you transactional and analytical workflows. As more development shifts to agentic workflows I'd bet Postgres shines when the overall ecosystem is more important than the human tools that were essential for the past 20 years. I loved Redgate's value-add but I don't think agents care about the UI which was the big win. SQL Server will continue to live in the enterprise andf where MS can sell lucrative support contracts or build for their clients, but I'm not seeing any net-new projects where the builders have any choice to not use SQL Server.

      • khurs 3 hours ago
        >I am going all the way. The developer experience around MSSQL is untouchable. SSMS and VS with sql projects runs circles around contemporary entity framework crap. Sprinkle in 3rd party tools from vendors like RedGate and you can replace multi-million dollar consulting packages.

        Try Postgresql. I was previously SQL Server and the move has been great.

        SSMS doesn't offer much over alternatives, both PGAdmin and others. VS is dying, VSCode is the future.

        Redgate doesn't offer anything that is essential or not available elsewhere for postgresql

        The money you spend on Microsoft licenses could be put towards more ram on the server.

        • saila 30 minutes ago
          > VS is dying

          I don't think this is true at all. If anything, it's the opposite, in that MS has greatly improved recent versions of Visual Studio.

          > VSCode is the future

          Maybe for some types of projects, but I have both VS and VS Code on my work machine and hardly ever use VS Code. There's just no comparison when working on .NET projects where VS is the clear winner.

      • olavgg 2 hours ago
        The MSSQL developer experience is ok, until you want to pipe the backup over ssh. Then you understand that the Linux support is a joke, with no stdout(https://linux.die.net/man/3/stdout) support.
      • colechristensen 4 hours ago
        Can you expand on what is better with MSSQL?
        • bob1029 3 hours ago
          One of the biggest advantages is that a lot of people in the business are already comfortable with the ecosystem. I know that from the perspective of HN that SSMS, pgAdmin, DBeaver, DB Browser for SQLite, et. al. are mostly isomorphic, but from the perspective of everyone else in the business, these are substantially different things to think about.

          Whether the popularity of the MS ecosystem is good or not is a separate problem. If we are solving for "make the business go well and I get paid more", the strategy is usually obvious. We can still advocate for OSS and not-so-many-eggs in the Microsoft basket while we get paid for using these technologies. Again, SQLite is the preferred engine in my tool belt. I don't want to have to manage a hosted sql machine. But, sometimes the problem absolutely insists upon it.

          Also, if you are using C#/.NET, integrating with MSSQL is always a little bit easier than the other providers. SQLite (and some others) have lackluster types for things like time. MSSQL has DateTime2 and DateTimeOffset that map exactly into the CLR types.

          • Grombobulous 1 hour ago
            I don’t mean to be annoyingly contrarian or argumentative with this statement: I’m definitely not convinced by both of your comments on this subject.

            “Comfort” is not really a tangible benefit.

            For example, I am personally very comfortable with Chef software for configuration management of VM-deployed applications, but I am quite aware that my own comfort doesn't make it a superior solution versus containerizing applications. We just have Chef around because that’s what was chosen 10 years ago.

            Obviously, developer/ops familiarity is still valuable, I don’t mean to say it’s not, but there is a point where the band-aid needs to be ripped off.

            I have a hunch that all these great tools that make MS SQL convenient are more like band-aids to a mediocre experience. E.g., RedGate replacing multi-million dollar consultancies sounds great, but what’s even better is not needing a multi-million dollar consultancy in the first place.

            I will also give you the context that I used to be a defacto DBA for MS SQL. That doesn’t necessarily mean I know what I’m talking about, but I do know that I personally do not miss SSMS or any of the Microsoft ecosystem.

            The whole vibe of that ecosystem is “put your life in Microsoft’s hands and do everything Microsoft’s way and we hold your hand and make it easy, except that making everything easy for everyone causes everything to be massively complicated and brittle.”

            I still occasionally get StackOverflow notifications for an answer I wrote which was just “try restarting Visual Studio” and even though the version I wrote it for is over a decade old I still get comments that say “this worked for me.”

      • bendangelo 4 hours ago
        Litestream solves the backup issue. I use it and it’s great.
    • timacles 31 minutes ago
      I think even Microsoft has abandoned SQL Server and spends more time improving their various Postgres Azure offerings. Their last major version release since 2022 added some AI features and thats it.

      As a DBA, who does a lot of very heavy DBA like stuff, Postgres is in another league from SQL Server. Because Postgres is linux native and open source, its flexibility, introspection and operability, just doesnt have a comparison in SQL Server.

      IMO, in the current tech landscape. SQL Server is essentially dead. Only companies using it are legacy windows shops which there are fewer and fewer of.

    • zepearl 3 hours ago
      > Synchronously updated materialized views...

      Oh yes, I'd love them too (if you're referring to, in Oracle slang, "...update on commit") - and it would be cool to have as well the option for a lazy update ("on demand" by taking into consideration only the records that have been changed since the last refresh, to handle multiple updates in a single pass - not sure how Oracle can achieve that technically...). This would be in my opinion a fantastic added functionality compared to basically all other (OLTP?) opensource DBs.

      And: I'm really curious about the "OrioleDB" project... ( https://github.com/orioledb/orioledb/releases ) as a few years ago I was struggling a lot with "vacuum" of a kind-of-temporary table that had quite high amounts of continuous random inserts & deletes (problem solved by accumulating more changes in RAM before flushing them to the table therefore increasing amount of rows changed per "page", but I had to sweat a lot to find a good balance...).

      • gandreani 2 hours ago
        Clickhouse offers the same through https://clickhouse.com/docs/materialized-view/incremental-ma.... I personally LOVE this feature and concur with the gp that they're really elegant solutions to difficult problems.

        Just to give an example, I ingest otel trace spans individually and in a materialized view calculate the total duration of the whole trace among other things.

    • joinjune 4 hours ago
      Oracle = Pain, Suffering, High Costs, Litigation, and Human Misery. If it wasn't for non-technical middle management that likes the perks of buying high cost software from vendors that throw nice parties they'd be out of business.
      • cduzz 1 hour ago
        Oracle makes their money by promising the C Suite "give us money and we'll solve your problems." There aren't actually many companies in a position to credibly make that promise.

        The oracle database is also actually pretty nice, according to the people I've talked to who use it.

        But mostly they play in the 'nobody ever got fired for suggesting' club. These days AWS is the most egregious landlord of that club, but whatever.

    • khurs 3 hours ago
      Postgresql is the better product, but doesn't have the horizontal scaling of MySQL/Maria though, so if you want an easy to setup cluster MySQL for high volume online retail store or similar has a use case still.
      • kev009 1 hour ago
        This hasn't been true for quite a long time, because it's domain of other products for both.

        i.e. MySQL/Maria's MM is one of the worse options compared to anything else.. like TiDB or Aurora on AWS for MySQL compat and Yugabyte or CockroachDB for Postgres compat (or Aurora on AWS or AlloyDB on GCP).

      • brightball 2 hours ago
        I think we take for granted how few databases ever outgrow vertical scaling needs.

        Usually there will be one or two tables that grow at a dramatically faster rate than everything else and I have always found that those belong in a separate data store.

        • roncesvalles 1 hour ago
          You need replication for HA. Otherwise the only HA you have is the RAID setup on the one machine. The reason people go horizontal is rarely scale. And if you're doing that you might as well use the passive replica as a read replica.
    • brightball 2 hours ago
      > 2. Synchronously updated materialized views (Sql Server calls them indexed views). These are incredible tools in complex data situations. I saw a project struggle with complex technical implementations that would be elegant, trivial and always correct with indexed views.

      I believe you can do this with the pg-trickle extension.

      https://github.com/trickle-labs/pg-trickle

    • zbentley 4 hours ago
      > lightweight connection; connection bouncers improve the situation, but you still have an unreasonably high memory footprint per concurrent connection.

      Pg connections are definitely heavy, but usually on resources other than memory in my experience. If you configure reasonable dirty reclamation and recycling, the memory numbers are often overstated due to Linux tools’ deceptive fork accounting and shared buffers. Ofc, if you’re averaging lots of heavy queries per connection it’ll be truly heavy, but many times the numbers overstate the impact.

      • SigmundA 1 hour ago
        Each PG connection being a whole process does not scale like MSSQL that uses a thread per connection which has a max of 32k per instance.

        There are no need for connection poolers in front of MSSQL although it is normal to pool connections in the client application which may hold hundreds open typically in a web server.

        This also allows MSSQL to more easily share cached query plans between connections since its just sharing executable code between threads.

        For PG to do plan caching it would need to serialize the plan between processes and that would require some significant work since it was never designed that way.

        PG has it obvious unix roots using processes instead of threads, MSSQL coming from Windows where new process are expensive and there was no real fork, but threads are cheap uses that approach instead.

    • d125q 5 hours ago
      Care to share some examples where SQL Server's indexed views would shine?

      In my eyes they're similar to triggers, which incur a high performance overhead in OLTP systems and are shunned by developers. In OLAP systems custom ETL code will likely outperform them.

      • branko_d 3 hours ago
        In OLTP, it's very difficult to guarantee correctness with triggers (very easy to have a race condition in concurrent environment). On a flip side, materialized views tend to lock more than you'd expect, especially when aggregates are involved.

        The sweet spot is if you have a read-mostly database and use SNAPSHOT transaction isolation for the readers (which is SQL Server's implementation of MVCC). That way, writers may still block writers, but writers can never block readers, even when indexed views are being maintained.

        Another neat trick is to "abuse" indexed views as multi-table CHECKs. The idea is to make a JOIN that would produce duplicated rows (and fail the indexed view's key) if some multi-table condition is not met.

      • aljgz 4 hours ago
        Indexed views are much faster than trying to achieve the same result with triggers. Triggers have serious concurrency limitations, and you do recalculations even when the fields you depend on are not touched.

        Indexed views are not much worse than indexes. Of course, when they refer to other tables there are underlying data lookups, but in our experience when we moved from triggers to indexed views, large scale data ingestion went way faster.

        Where we used it: While revamping a large scale sales program, we stored the warehouse in/out in one table, and several things like current stock were calculated using indexed views.

        Bonus: Using Snapshot concurrency control, you can do many things concurrently, and only when they both updates to a certain product in the same store you'll get the second transaction failing (which could be retried on the backend).

        The fact that they are completely in-sync with your data is amazing.

        • switchbak 4 hours ago
          PG has had incremental view maintenance on the horizon for many years. I expect it to remain on the horizon for a long time.

          What you're describing is amazing, and I wish I had it available to us. We've hand rolled far too many triggers to achieve the same thing, with all the expected problems you'd assume. I'm sure it could be abused/misused, but a batteries-included approach like that would be huge.

          • munk-a 55 minutes ago
            If you are hand-rolling them then I might suggest https://github.com/trickle-labs/pg-trickle#pg_trickle which at least reduces the labor involved in trying to get it up and running and appears to address a lot of the correctness concerns I've traditionally had (like a sync not firing correctly due to a mid-operation outage).
      • mickeyp 5 hours ago
        These things exist to eliminate the risk of ever serving stale information from a materialised view. I.e., their benefit is political/reputational as much as they are technical in the sense that they save you effort like remembering to invalidate a MV after an ingest operation.

        Stale MV is a thing you only ever burn your fingers on once. Like how "It's not DNS" is a common meme in networking.

    • asah 5 hours ago
      two techniques I use with pg:

      1. "materialize" the view as a full table, then index that. Any reasonable pipeline/ETL tool can provide incremental updates between tables. Obviously, anything materialized requires considerations around storage, replication, backup/restore, I/O, etc.

      2. use a regular VIEW and index (precisely) the underlying expressions mentioned in the view, i.e. so when the view is used, then the indexes get used.

      Both require rewriting SQL, though I've used VIEWs to make the change transparent.

      • ballon_monkey 1 hour ago
        Materialized views in pg with any incremental updates has timing inconsistencies that SQL Server doesn't have.
    • pbronez 5 hours ago
      I am currently fighting my way off SQL Server towards PostgreSQL.

      Windows Server is a real pain to operate and the SQL Server ecosystem expects you to run a lot of add-ons on the server alongside your database. Those don’t translate to managed database services, so you lose a lot of functionality if you jump to RDS or similar.

      The first party tools are also aging poorly. SSIS and SSRS are not fun. SSMS is ok for what it is but can’t compete with the ecosystem around PostgreSQL.

      Maybe I’m missing something but I can’t wait to ditch it.

      • hotsauceror 5 hours ago
        What are some of the add-ons that you run on the server? We run ours in a pretty bare-bones manner so I'm interested to hear what you're doing.
      • aljgz 4 hours ago
        Agree about Windows Server. You can run SqlServer on Linux though. I'm not aware of your specific addons, but the Sql Server itself works perfectly well on Linux.
      • FuriouslyAdrift 4 hours ago
        SSMS has been rebuilt as a framework within Visual Studio, now. It includes Copilot AI and a bunch of other niceties.
    • ksec 5 hours ago
      >I do myself a favor and always avoid Oracle and MySql/MariaDB.

      So what's wrong with MySQL or MariaDB?

      • rmunn 4 hours ago
        And although you didn't ask, I'll list what's wrong with Oracle. It's very simple.

        Oracle treats empty strings as being NULL.

        Anyone who's never used Oracle before in their life is probably wondering if I'm making it up. I'm not. In Oracle, inserting '' in a VARCHAR column is exactly the same as inserting NULL. And if there's a NOT NULL column, you're not allowed to store the empty string in there.

        Which means that in Oracle, you do not have any way of distinguishing "I don't know the person's middle name" vs. "I know what the person's middle name is: he/she doesn't have one".

        There are apparently historical reasons for this, but I don't care. The empty string is NOT the same as NULL, and any software that treats them as the same IS BUGGY!

        Sorry. Had to get that off my chest. I know I'm answering a question you didn't ask, but that has been bothering me for nearly 25 years (I first learned about this misfeature of Oracle's in 2002 or 2003), and I just had to vent to somebody who would understand.

        • kjs3 1 hour ago
          I'll list what's wrong with Oracle

          Very interesting (and hopefully cathartic). I never got past "it involves doing business with Oracle".

        • johnisgood 3 hours ago
          > Oracle treats empty strings as being NULL.

          That is ridiculous. Do not they know the difference between "" and NULL?

          • rmunn 2 hours ago
            I'm pretty sure the historical reasons I mentioned involved creating the software before the SQL standard came out, meaning they were treating NULL as meaning "nothing", instead of meaning "unknown" as the SQL standard requires. But that's as far as I care to go digging into a database system I will never use of my own free will.
        • SigmundA 1 hour ago
          Interesting I have definitely used the distinction between null and empty string quite a bit in MSSQL and matches most programming languages.

          Another issue that used to exist was Oracle table name were limited to like 12 characters or something so I have seen horrible abbreviated table names to fit in the Oracle limitation even in other DB's due to some systems being able to run on both MSSQL and Oracle even though SQL Server has a 255 char limit for table names.

      • rmunn 4 hours ago
        Don't know of anything wrong with MariaDB, but there used to be plenty wrong with MySQL. To give the most egregious example (THANKFULLY fixed in MariaDB, but was present in MySQL for the longest time), inserting the value 128 into a TINYINT column (signed 8-bit int) would clamp the value rather than returning an error. Which might be what you want... except if that was a primary key column. Marvel at the following, which used to be how MySQL behaved:

        Note: the below taken nearly verbatim from https://sql-info.de/mysql/referential-integrity.html#3_5

          CREATE DATABASE foo;
          USE foo;
          CREATE TABLE one ( id TINYINT NOT NULL PRIMARY KEY ) TYPE=InnoDB ;
          CREATE TABLE two (
            id TINYINT NOT NULL PRIMARY KEY,
            INDEX (id),
            CONSTRAINT id_fkey FOREIGN KEY (id) REFERENCES one(id)
          ) TYPE=InnoDB ;
        
        Now that we've created both tables, let's insert a record into table one:

          INSERT INTO one VALUES (127);
        
        And now let's insert a record with a different primary key into table two:

          INSERT INTO two VALUES (128);
        
        MariaDB will give you an error at this point (ERROR 1264 (22003): Out of range value for column 'id' at row 1), but MySQL (at least back when I tried this about ten years ago, which was the last time I was forced to work with MySQL — and I am so glad I never have to go back!) would return no error message and just say "Query OK, 1 row affected (0.009 sec)".

        Now let's select the value we inserted into table "two":

          SELECT * FROM two;
        
        And what do we see? The value 127, even though we inserted 128. Which has created a foreign-key relationship to table "one" that we never intended to put in there.

        There are other reasons why MySQL was inadequate, but I no longer remember them. Probably MariaDB has fixed them by now. But I no longer have to use MySQL/MariaDB for anything, and I never want to go back. I have a VERY strong averse reaction, caused by past pain, when I think of using MariaDB. (I actually spun up a virtual machine to test what I wrote here, because there's no way I was going to install MariaDB on my primary work machine).

      • Macha 3 hours ago
        1. No transactional DDL

        2. No MERGE statement

        3. No partial indices

        4. Many ways to lock out instant add table, meaning you can’t add a column without a full table write, which can lock the table for minutes at a time in even moderately sized tables.

        5. Dealing with legacy mysql databases often means dealing with utf8mb3, which used to be the default utf8 data type despite not storing all utf8

        6. Dealing with all but the most recent mysql databases means dealing with non strict mode which means your NOT NULL column won’t require a value.

        • hilariously 1 hour ago
          If you are talking about SQL Server, the MERGE statement is basically a bug minefield, I wouldn't use it unless I wanted to deadlock myself.
      • phamilton 5 hours ago
        Just a set of things too minor to move off of it but annoying enough to not want to start with it.

        My list:

        No `explain (analyze,buffers)`. Instant DDL has some warts (e.g. fk, metadata locks). Query planning bugs (actually... query planning in general is disappointing). Exiting the repl doesn't stop queries. Implicit type casting. Replication lag from large DDL (e.g. creating an index). Lack of two phase DDL (creating constraints NOT VALID and then VALIDATE later). Lack of extensions (e.g. pg_vector). No safe access to inspect buffer cache. AWS Aurora seems to only add shiny new things to Postgres. And more.

        Again, none of this is quite enough to migrate off of it for an established system, but certainly enough to avoid it on a new project.

    • cwnyth 5 hours ago
      What's wrong with MariaDB?
      • chuckadams 5 hours ago
        Last I looked, MariaDB still implemented JSON columns as LONGTEXT under the covers, making it a non-starter for any serious use of said type.
    • SigmundA 4 hours ago
      I also miss clustered indexes, datetimeoffest, plan caching and query hints from MSSQL.
  • sega_sai 5 hours ago
    Speaking as long-term (>15 years) user of Postgres in science, I am getting worried about the lack of columnar type of storage in Postgresql. As the datasets become bigger and bigger, the limitations of PG's storage are becoming more and more significant. I know there are various extensions (i.e. cetus) that may offer such functionality, but then you depend on that extension being supported in the future, as well additional complexity.
    • tudorg 4 hours ago
      A bit of a shameless plug, but I've been working on this for a few months in the form of an extension: https://github.com/xataio/deltax

      When I started I thought there's too much inherent overhead in using Postgres tables for storage and using the Postgres executor, so figured it would be pretty cool to match Timescale in performance. I didn't think it would be possible to get close to dedicated analytical DBs. But as the project progressed and the performance got better and better, I'm now firmly in the camp of doing analytics with Postgres + an extension.

      • jhoechtl 2 hours ago
        Thanks for sharing. That looks promising, good luck!
    • tyre 5 hours ago
      You might be using the wrong database if that’s what you’re hoping for. Columnar databases are a separate category.

      It’s like saying that you’re getting worried Apple doesn’t sell washing machines.

      • atombender 4 hours ago
        Postgres's whole origin story is basically to think outside the box and don't be constrained by existing thinking. Stonebraker thought existing databases were too limited in terms of their data types and expressiveness. He started Postgres as an evolution of Ingres (Postgres = Post Ingres) that added rich custom data types and a rewriting system based on rules.

        Columnar and all the other fun stuff (JSON, GIS, inverted indexes, embedding vectors) is a natural progression of that thinking. With TimescaleDB, Hydra, Citus, pg_mooncake, etc. becoming very popular the last few years, there is a clear demand for an integrated experience.

        (Stonebraker also thought one database shouldn't do everything, as described in his early 2000s "One Size Does Not Fit All" paper, and Stonebraker branched out into HStore/Vertica for columnar. In hindsight, I think that was appropriate for the time, but no longer a significant concern.)

      • masklinn 3 hours ago
        > You might be using the wrong database if that’s what you’re hoping for. Columnar databases are a separate category.

        I don't want a columnar database, I have a few tables which would be excellent fits for columnar storage. And the relational model doesn't say anything about the way data is stored.

      • sega_sai 4 hours ago
        PostgreSQL was a right tool for my task for many years. It is a question for PostgreSQL can adapt to a new reality of much bigger datasets or I have to switch to a new tool. And I am not the only user of Postgresql in this context. So it is easy to say in vacuum 'you are using the wrong database', but it's not something that can be easily changed with 100s of Tb of data, existing user workflows etc.
        • switchbak 3 hours ago
          Columnar vs row based is a large architectural distinction. In theory it'd be great to support both, but this has also been an elusive and complex problem to solve. You're not going to see a simple "columnar type" on a row based system like this any time soon, that's trivializing the situation.

          Andy Pavlo teaches about this and has done real work in this space, and certainly considers it to be non-trivial. His YouTube channel is spicy and worth looking into if you want to dive deep on the topic.

        • chucksmash 4 hours ago
          Just because it's easy to say doesn't mean it's wrong.

          By the same logic, you could say Microsoft Access should have all the capabilities of Postgres because it's painful for small businesses to move off of it when it's no longer a good fit for their needs.

          • sega_sai 3 hours ago
            The thing is that PG had introduced pluggable storage engines exactly for the reason I am talking about, and there have been few implementations of columnar storage using PG functionality, it's just they always stayed out of the tree. So I wasn't talking about some functionality that is completely out of scope.

            But I agree in the end I may be forced to move elsewhere...

        • kjs3 3 hours ago
          "Not something that can be easily changed" is not a valid rebuttal to "the tool no longer supports how the task I am working on has evolved over many years". This isn't 'saying in a vacuum'; 'has this tool ceased to be the right answer and how do I move to a better solution' is an exercise responsible app owners should engage in all the time. Shouldn't be different than things I presume your job touches on: if your research evolves to need to see in radio waves, do you complain the optical telescope you started with back in the day doesn't see radio waves and expect someone else to make that happen, or do you find a radio telescope?

          You can either 1) accept the limits of the tool, at least until it becomes a priority for the tool developer to add whatever feature you want, 2) pay someone to develop the features you want, or 3) buck up and do what vast numbers of ops folks have done before you and move to something that does what you need.

        • brookst 4 hours ago
          Age old product question. The Honda Civic is much larger today than the original, because the original targeted young people on a budget. As they aged and had kids, they needed more room in the car. Most peoples’ insinct is to buy a newer version of the car they love, so the civic grew to accommodate the aging market.

          No real point here other than an observation about how the installed base’s needs change, across industries.

      • SigmundA 4 hours ago
        I don't agree, a relational database is not required to have a particular storage engine or format, that is an implementation detail.

        There are other relational databases that have both kinds of storage engines and some use both on the same table (row based insert with column based migration and secondary column store indexes: https://learn.microsoft.com/en-us/sql/relational-databases/i...

        Just like you can have b-tree based table storage vs heap in the case of index organized tables / clustered indexes (which pg doesn't have) you can choose column based instead the logical data model is still the same relational model.

      • mickeyp 5 hours ago
        I mean I don't disagree with you, but they did just add a graph database feature, which is about as orthogonal to relational database design as you can get.
    • vovavili 3 hours ago
      From a computer science perspective, I'm not exactly sure how a transactional database would implement a columnar type. Postgres + CDC + an actual analytical database like ClickHouse would be your strongest bet at scale.
    • khurs 4 hours ago
      "As the datasets become bigger and bigger,"

      I think the better way is to use Postgresql for new data and routinely archive off older data to data warehouse type database, to keep the Postgres one small.

      (Many companies also now use a RDBMS alongside either a KV database or document store in main app)

      • sgt 4 hours ago
        Which document store do you prefer? And do you use it via Postgres using a foreign wrapper?
        • khurs 3 hours ago
          Two most recent companies:

          The first was using SQL Server alongside CouchDB, an older company. CRUD Data into SQL, documents into Couch. (used separately, document Url in Couch stored in SQL and brought in by front end)

          The second, startup with funding, was using Azure SQL Server (and complaining of the cost) and using Azure Cosmo (Key Value NoSQL) alongside it. Same relationship, no link between the two, it's the front end that drew data from both.

          Just look up the pro and cons of each database, some are insert only, some are distributed, some are faster read then write etc. LLM will give you a quick comparison.

          Also: https://db-engines.com/en/ranking

          • sgt 15 minutes ago
            I wonder if Postgres might be well coupled with MongoDB via fdw.
    • jhoechtl 2 hours ago
      In this regard I do find DuckDB amazing.
    • segmondy 5 hours ago
      Fine by me, as a 25 years user. More is not necessarily better, see redis.
    • znpy 4 hours ago
      I was about to post something similar.

      There was a big fanfare about orioledb a while ago, and i think it got bought by people that wanted to push that into mainstream postgres?

      Did it die somewhere along the road?

  • mkurz 6 hours ago
    No word that PostgreSQL 19 introduces native application-time temporal data support based on the SQL:2011 standard? https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-...
    • unfocso 5 hours ago
      Wow. Incredible how this was not mentioned in the OP. I had done it with tcn triggers and adding "_archive" shadown tables manually with tcn (https://www.postgresql.org/docs/current/tcn.html), but doing it natively is gonna be, as per most postgresql implementations, wonderful.
    • m_w_ 5 hours ago
      Nor more than a mention of Query Hints, which had some interesting discussion under a similarly-titled submission.

      https://news.ycombinator.com/item?id=48413655

    • mickeyp 4 hours ago
      They're a cool feature but honestly a bit tricky to use well, IMHO. And be careful with PII lingering in a temporal void somewhere for a long time :-)
  • breakingcups 6 hours ago
    I can't decide whether this person writes in the type of style that was apparently overrepresented in LLM training, or whether they heavily used AI to spruce up their writing. I'm learning towards the latter.
    • tux3 5 hours ago
      Spruce up is unreasonably charitable. I'm more irritated that the authorship information is misleading. craig-kerstiens is not available on Huggingface, and yet not a single sentence in this article seems to have been typed on a keyboard.

      When Claude writes things like "as someone who has spent a lot of time doing X", I think this is also a kind of failure of alignment. LLMs shouldn't write as if they had personal experience. It's something a person might say in the training data, but I just think LLMs shouldn't claim life experience they don't have, even if that's a statistically likely sequence of tokens.

    • __s 5 hours ago
      You don't need to be charitable, Snowflake laid off technical writers citing AI to replace them: https://snowflake.help/snowflake-layoffs-2026-technical-writ...
    • iterateoften 5 hours ago
      These low effort constant comments about style or formatting are against Hackernews guidelines for discussions and something needs to be done to clean up the comment section. Getting to a ridiculous point
      • aeturnum 4 hours ago
        If comments about how "this blog post could have been a link to this github repo" are in-bounds, so are comments about how "this could have been a link to a LLM session." HN has always tried to work out if a submission is novel and interesting work or is just a slick coat of paint on mundane work (sometimes if good work is obscured by insufficiently clever presentation). Highlighting that content was generated by an LLM and asking if that impacts how to understand it is entirely in keeping with our culture and standards.
      • theappsecguy 5 hours ago
        It's not about style or formatting, people are tired of reading slop.
        • horsawlarway 5 hours ago
          These comments are worse than the slop.
          • bspammer 5 hours ago
            They aren't actually. They make me feel like I'm not going crazy - that I'm not the only person noticing that the quality of the average article on hacker news has dropped off a cliff in the last 6 months. Links from different people with different cultures, life experiences, and languages have the same tone of voice, the same sentence structure, and the same breathless, boring, staccato yet arrhythmic, emotive yet soulless style.

            I hope everyone keeps pointing it out. Even better, change the site guidelines to make AI generated articles a flaggable offense. It's already been done for comments.

            • breakingcups 3 hours ago
              Hear hear. I can't believe people are content to consume slop like this.
    • eatonphil 5 hours ago
      Pangram says the text is entirely AI generated but I don't know how trustworthy Pangram is. (I would love to hear what others think about it.)
      • CharlesW 1 hour ago
        Favorable benchmarks for Pangram exist, and it is one of the better AI detectors. But it's never been trustworthy as proof of authorship/misconduct, and it's getting less useful as models (and people's ability to steer them) improve.

        https://www.theatlantic.com/technology/2026/05/pangram-ai-de...

      • ballon_monkey 53 minutes ago
        At some point you're going to have to accept content is AI generated. There's heaps of stuff you probably read daily you don't even realise is AI generated.
      • Chu4eeno 5 hours ago
        It has extremely low false positive rate in various tests (e. g. https://arxiv.org/html/2501.15654v1), I've never seen it mark something I knew was human written as AI.
    • Waterluvian 5 hours ago
      I get it's in vogue to take stabs at whether or not AI was used. But I think the more useful approach is to instead be critical of the end product, if you have criticisms of it.
      • bronson 5 hours ago
        This IS a criticism of the end product.
        • Waterluvian 5 hours ago
          This actually gave me an amusing idea: a book review club that strictly reviews the cover art, book binding, hand feel, paper weight, font, etc. of the book.
  • magnio 5 hours ago
    i like the COPY and logical replication improvements. Currently I back up my PG database with a sidecar Databasus instance that is heavier than my entire backend + DB + Caddy!

    (LLM writing rant below)

    ---

    > That alone tells you something: Users had a real need, and the ecosystem filled the gap.

    > This sounds straightforward, but it solves a real operational problem.

    > None of these change the world. All of them make day-to-day data workflows better.

    > The easy thing to do here is list planner changes and call it done. But the more useful takeaway is this: Postgres keeps getting better at recognizing the shape of common queries and doing less unnecessary work.

    > [Proceed to list planner changes]

    If Orwell were alive today, he might declare himself illiterate in English and learn Klingon just to avoid having to read these.

  • bradhe 19 minutes ago
    Wild to me that this is on the Snowflake blog. I understand why, but...what a sign of the times.
  • mickeyp 5 hours ago
    The graph database feature looks interesting, but I wonder...

    SELECT customer_name FROM GRAPH_TABLE (myshop MATCH (c IS customers)-[IS customer_orders]->(o IS orders WHERE o.ordered_when = current_date) COLUMNS (c.name AS customer_name));

    That is _awful_ syntax; it is reminiscent of neo4j, which is surely not a tool anyone serious should copy from outright in 2026.

    And of course the final thing I am left wondering is if it's fast. Row-level security is such a useful feature and yet only a fool would contemplate building anything serious with Postgres', as the planner goes haywire and does per-row-matching, nuking performance.

    • hobofan 4 hours ago
      That is not a homebrew sytax that Postgres came up with themselves.

      It's SQL/PGQ, which was derived from the Cypher language for Neo4J and now is part of the SQL standard.

      • mickeyp 3 hours ago
        Fair --- but I feel my criticism stands. It's awful. Don't get me started on 80% of all deployment uses of neo4j...
    • sgarland 2 hours ago
      > [RLS]… planner goes haywire and does per-row-matching

      Er… yes? It’s called Row-level security; how else are you going to validate that a row passes a policy?

  • ktosobcy 1 hour ago
    From more devops-ish perspective: I would love for PostgreSQL to finally have in-place upgrade between (successive) major versions.

    Most distros can handle the annoying quirk of having older+newer version to run `pg_upgrade` but when using docker it's pure PITA to upgrade to newer (major) version :/

  • Jysix 5 hours ago
    I'm dreaming of block compression in Postgresql, instead of only row compression, too limited to be effective. I know you can store your data on a Zfs pool with block compression, but having it native would remove the burdain of setting this up and maybe better perf.
  • aamederen 4 hours ago
    It's funny that, "GROUP BY ALL" makes a lot of sense but it had never crossed my mind before!
  • ethagnawl 4 hours ago
    It's great to see GROUP BY ALL introduced which, AFAIK, was a concept introduced by DuckDB.

    > Several of these features were first introduced by DuckDB, while some are inspired by other systems. Many of the features originally introduced by DuckDB (e.g., GROUP BY ALL) have been since adapted by other systems.

    https://duckdb.org/docs/lts/sql/dialect/friendly_sql

  • ing33k 5 hours ago
    The Authors avatar looked familiar, crunchydata ?
    • eatonphil 5 hours ago
      Snowflake acquired Crunchy Data yes and Craig was at Crunchy Data.
      • elthor89 4 hours ago
        Why did databricks and snowflake buy Postgres vendors?
      • pbronez 5 hours ago
        Interesting, I was wondering why Snowflake was investing in PostgreSQL. Looks like Snowflake bought Crunchy Data and Databricks bought NEON… so the two leading DWaaS companies have managed PostgreSQL offerings now.
        • __s 5 hours ago
          & ClickHouse has managed Postgres in open beta (which I work on)
  • aynyc 5 hours ago
    I'm wondering. Just wondering? Will they ever support multiple storage engines like MariaDB? Having a storage engine that support OLTP or OLAP or append-only would be cool. I totally understand if they don't want to do that.
  • tehlike 5 hours ago
    I am looking forward to the day it supports table access methods that enables variety of use cases out of box.

    Something like rocksdb as PG backend would be fantastic. Yugabyte does this but it's not PG.

  • doublerabbit 55 minutes ago
    How the world has changed. It was PHP and MySQL now it's Python and Postgres.

    During my cpanel script kiddy day it I never used because everything PHP was MySQL based and postgres was "Why would you use that"...

  • klaussilveira 5 hours ago
    Oh my, finally a reason to upgrade from 16.
    • fourseventy 5 hours ago
      The Async I/O in PG18 is what got me to jump from 16
  • felix-the-cat 5 hours ago
    This looks amazing, we've been using Postgres in production for the last two years on a fairly high-volume system and it's been fantastic.