Hey, Threadiverse! I’m looking for informed opinions on database choices.

I can stand up an Internet-facing application and have it use either MySQL or PostgreSQL. Which is the better choice, and why do you think so?

Thanks!

  • @[email protected]
    link
    fedilink
    English
    11
    edit-2
    11 hours ago

    Postgres. It’s more strict by default, which leads to a lot fewer surprises.

    Here’s my rule of thumb:

    1. SQLite - if it’s enough
    2. Postgres
    3. MariaDB - if you don’t care about your data and just want the thing to work
    4. MySQL - if you sold your soul to Oracle, but still can’t afford their license fee
    5. Something else - you’re a hipster or have very unique requirements
  • @[email protected]
    link
    fedilink
    English
    813 hours ago

    I have historically gone with PostgreSQL and had no complaints. The licensing issues concerning MySQL also give one pause (Oracle are greedy bastards who will use any excuse to extract money from captive customers, so depending on their properties is to be avoided). Having said that, these days, SQLite is probably sufficient for many workloads and has the advantage of not requiring a database server.

  • @[email protected]
    link
    fedilink
    English
    8
    edit-2
    16 hours ago

    The answer is impossible to answer until you tell us more about your needs. Better choice considering what?

    In general, untill you have terabytes of data or a significant amount of traffic (operations per second) database choice does not matter and you should be using cheaper option, where the cost should be assessed as a derivative of price of hosting, cost per operation, cost to deliver (how familiar you are with it).

    When you have significant amount of data or traffic - only then you should worry about database kind or language. Until then this could be a premature optimization.

  • @[email protected]
    link
    fedilink
    English
    7
    edit-2
    15 hours ago

    Postgres is far superior in every way.

    We used MySQL (and Percona XtraDB) servers at work, and it is so bad. So I made several presentations showing generic and specific reasons why Postgres is better. I had to cut a lot of content because MySQL is just that bad.

    Some things may not seem relevant now, but as you keep the DB around long enough, you will appreciate the whole package of Postgres.

    Things that will help a lot, but are extensions:

    • pg_partman - for automatic partition management
    • patroni - management of replicas, automatic failover - it does everything for you with simple commands

    There is a DB comparison matrix, but hasn’t been updated in over a year, which is a shame, but still gives you the idea of how different databases support SQL features: link.

    Spoiler: postgres has the most support, with a huge lead

    Edit: MySQL is dead last, btw

  • Max-P
    link
    fedilink
    English
    731 day ago

    As someone that admins hundreds of MySQL at work, I’d go with PostgreSQL.

    • @pageflight
      link
      English
      2424 hours ago

      Yeah, every time I find some weird annoying behavior or some missing feature in MySQL, PostgreSQL is doing it right.

      That said, also ask yourself if you really need a relational database, or whether an object store or append-only / timeseries db would fit better.

    • @[email protected]
      link
      fedilink
      English
      619 hours ago

      I used MariaDB for school projects, what exactly is wrong with it? Asking because I’m just unaware

      • @[email protected]
        link
        fedilink
        English
        -8
        edit-2
        18 hours ago

        While there was a time, where those databases were considered “good”, they are only this famous because they have been free or open source for ages. Professors love open source stuff. This does not necessarily mean it is a good product in terms of database functionality. They have been stuck in the old age and simply get outperformed by almost anything. Professors also hate to change their slides and to learn something new. Because their priority is on functionality, not on real world use. And when you want to use a product in the real world, non-functional properties gain a lot of value. One of them is performance.

        If you want to have a fast, reliable, open source database, use ClickHouse.

        • @[email protected]
          link
          fedilink
          English
          3
          edit-2
          11 hours ago

          Generally speaking, if a professor recommends something, it probably sucks. Their information is incredibly outdated and is usually whatever they used in their own undergrad program.

          At school I learned:

          • Java
          • PHP
          • MySQL
          • C#
          • C++
          • Racket (Lisp)

          Each of those has a better alternative, with C# being the least bad. For example:

          • Java -> Kotlin
          • PHP -> Python
          • MySQL -> SQLite or Postgres
          • C# -> Python (desktop QT GUIs) or web stack (e.g. Tauri for desktop web stack)
          • C++ -> Rust (non-games) or a game engine
          • Lisp -> Haskell

          Formal education is for learning concepts, learn programming languages and tools on your own.

          • @[email protected]
            link
            fedilink
            English
            518 hours ago

            The question was for an internet facing application, not a homelab.

            As someone who has dealt with MariaDB in production, I would certainly look elsewhere. Haven’t had any colleagues who would disagree…

            • @ByteJunk
              link
              English
              517 hours ago

              You’re appealing to authority instead of presenting real arguments.

          • @[email protected]
            link
            fedilink
            English
            118 hours ago

            Smear campaign with an open source product? Are you sure you still have a working organ between your ears?

            That being said, my recommendation is based on using databases in big data environments for 15 years. But I am glad that your home lab is working fine with MariaDB. Does not mean it is a good product. And your comment just proves my point.

  • @friend_of_satan
    link
    English
    37
    edit-2
    24 hours ago

    As somebody who just watched a team implement MySQL for an app that only supported Postgres, I’d go with Postgres.

    I never want to use MySQL again. Postgres or SQLite for relational databases.

    • @[email protected]
      link
      fedilink
      English
      -2323 hours ago

      Ha! My deepest experience with postgres was watching it fall over and wedge daily when run behind red hat’s satellite (the flailing lame foreman one, not spacewalk).

      Wow, was it ever a dog. Yeah, I get it: the company who shat Systemd on the planet can’t be asked to do much better, but still.

  • femtech
    link
    fedilink
    English
    12
    edit-2
    20 hours ago

    Postgres, the extensions and open source community have been very helpful.

    Postgis for images

    CloudNative-pg for running DB clusters in kuberneties.

  • @zoostation
    link
    English
    531 day ago

    Postgres is a more robust and better designed and developed product, also it’s not owned by fucking Oracle.

  • Dark Arc
    link
    fedilink
    English
    2524 hours ago

    PostgreSQL is just better. It’s supports transactions on DDL (things like altering table structure) and enforces unique constraints after transactions complete … so you can actually do a bunch of important stuff (like update your table structure or swap unique values between rows) safely.

  • z3rOR0ne
    link
    fedilink
    English
    1622 hours ago

    Most applications can do just fine with SQLite, but if you need something with a lot more write speed, go with PostgreSQL.

  • @halloween_spookster
    link
    English
    520 hours ago

    We have both MySQL and PostgreSQL in our production environment. Postgres is way nicer as a user of the DB. I created a document months ago outlining a dozen different things that Postgres does that MySQL either doesn’t do or does worse. I can’t speak to managing the DB as I don’t have experience with that.