Instant database clones with PostgreSQL 18

(boringsql.com)

108 points | by radimm 5 hours ago

8 comments

  • majodev 18 minutes ago
    Uff, I had no idea that Postgres v15 introduced WAL_LOG and changed the defaults from FILE_COPY. For (parallel CI) test envs, it make so much sense to switch back to the FILE_COPY strategy ... and I previously actually relied on that behavior.

    Raised an issue in my previous pet project for doing concurrent integration tests with real PostgreSQL DBs (https://github.com/allaboutapps/integresql) as well.

  • christophilus 11 minutes ago
    As an aside, I just jumped around and read a few articles. This entire blog looks excellent. I’m going to have to spend some time reading it. I didn’t know about Postgres’s range types.
  • radarroark 29 minutes ago
    In theory, a database that uses immutable data structures (the hash array mapped trie popularized by Clojure) could allow instant clones on any filesystem, not just ZFS/XFS, and allow instant clones of any subset of the data, not just the entire db. I say "in theory" but I actually built this already so it's not just a theory. I never understood why there aren't more HAMT based databases.
  • BenjaminFaal 56 minutes ago
    For anyone looking for a simple GUI for local testing/development of Postgres based applications. I built a tool a few years ago that simplifies the process: https://github.com/BenjaminFaal/pgtt
    • okigan 49 minutes ago
      Would love to see a snapshot of the GUI as part of the README.md.

      Also docker link seems to be broken.

      • BenjaminFaal 14 minutes ago
        Fixed the package link. Github somehow made it private. I will add a snapshot right now.
  • 1f97 1 hour ago
  • TimH 1 hour ago
    Looks like it would probably be quite useful when setting up git worktrees, to get multiple claude code instances spun up a bit more easily.
  • 1a527dd5 1 hour ago
    Many thanks, this solves integration tests for us!
  • mvcosta91 2 hours ago
    It looks very interesting for integration tests
    • radimm 1 hour ago
      OP here - yes, this is my use case too: integration and regression testing, as well as providing learning environments. It makes working with larger datasets a breeze.
    • presentation 1 hour ago
      We do this, preview deploys, and migration dry runs using Neon Postgres’s branching functionality - seems one benefit of that vs this is that it works even with active connections which is good for doing these things on live databases.
    • drakyoko 1 hour ago
      would this work inside test containers?
      • radimm 36 minutes ago
        OP here - still have to try (generally operate on VM/bare metal level); but my understanding is that ioctl call would get passed to the underlying volume; i.e. you would have to mount volume