I've always preferred Docker for setting up databases and database-like services on a development machine because then everything is nicely isolated. i.e no need to worry about random files in /etc/foo, easy to setup many versions per project etc.
I went down this road for a long time and eventually realised I was gaining very little from it and picking up a bunch of downsides.
Obviously everyone’s experience is different because we’re all doing different things but I mostly work with Rust and Node, I use Postgres.app as a local dev database and just run the code natively, sometimes Node via nvm when I care about specific runtime versions.
It works great. It performs better then any Docker-based solution (I’m on a Mac) and doesn’t leave me with a bunch of weird dangling images/containers/whatever taking up resources. I still like the idea of using the same Docker environment in dev that I use in production but in reality I just don’t need it.
I love using Docker Compose in theory, but I've found it really difficult to do local development with a "Docker only" setup on Mac, due to the performance issues with the filesystem layer (even when using cached volumes, etc). Ruby gemfiles and node_modules are big culprits here, since they involve a lot of filesystem accesses to load/install dependencies. It might be more manageable if I was just using Postgres from docker and had e.g. rubyenv and nodenv installed locally, but that sacrifices a lot of the benefits you gain from having a docker-compose setup, and I've never had any problems with managing multiple PG versions in my Postgres.app install.
Postgres.app supports multiple versions, and doesn't put random files in /etc/foo - everything is in the right place for a Mac app, i.e. Postgres itself is in /Applications and the database is in ~/Library/Application\ Support/Postgres.
Let's see... the user could download an app, click it, and run Postgres. Or they could figure out how to install Docker, then run a terminal, then type two obscure and inscrutable commands into it. Perhaps administrator privileges are required along the way.
Sure, the Docker route is better in many ways. But perhaps you're not understanding the audience for a packaged Mac application.
I’m yet to see people who use docker for development do it faster than People who don’t. They always end up having to mount specific folders etc which nullifies the isolAtion point and you lose so much because even something as simple as ide debugging becomes a complicated (if not impossible) task.
I use docker (well, podman) for postgres on my personal machine because it's the one package that causes me headaches in my rolling release distro. Postgres n -> n+1 always requires a migration process (and you can't shortcut n -> n+x), so if I spend a period of time not working on my Postgres using projects, I find I've updated from n -> n+2 or more and need to figure out how to get the old version installed again since it's a dependency of the migration tools to have both versions available.
While Postgres works fine on macs, being able to run MySQL in a docker container and not have to deal with actually keeping it running on our macs has been a huge time saver.
This is why we use SQLite for all the things. I don't even remember what a database installation process looks like anymore. It's just a nuget dependency and some code for us.
I love postgres.app, such a great solution. It always bothered me though that https://postgres.app would just 404 whenever I'd go to look up the docs or go to install on a new machine.
Hopefully a few other people have had their lives made a tiny bit easier by the redirect I set up.
It looks nice for beginners but personally I find that a simple docker-compose file per project that spins up a postgresql container works pretty nicely and is really easy to use. I just run `docker-compose up -d` and I have a database running. Docker containers also stay out of the way of the os and I can run the right versions for whichever project.
I think you and this app are solving quite different problems. For you (and most people replying) it sounds like PostgreSQL is a component in a larger app that will eventually get deployed and run somewhere else and only be interacted with via that app.
Others (like myself) use PostgreSQL as a local datastore and analysis engine. All my interaction with the database is via ad hoc SQL commands and locally run scripts and desktop applications. For this usecase, something like this is much easier to use than docker compose.
Also a fan of Postico. For anyone curious, I emailed support asking if there would be access to multiple query tabs after purchase/activation, but got no response. I'm happy to report that it does work that way, and works well. I hope this is app is still being supported because it's overall it's quite well done.
Can't recommend this highly enough. It comes with the full PostGIS stack included, so command-line gdal, ogr2ogr, proj etc. - just add to your path and it's there for you. It runs multiple versions of Postgres, which came to my aid when Homebrew botched an upgrade: I could just copy the data files across to Postgres.app and recover them there. Overall it's so much better than installing Postgres via Homebrew.
Been a Postgres.app user for years, it's been great. There are other more "sophisticated" setups that have advantages (and disadvantages!) but nothing beats the convenience, in my eyes, of Postgres.app.
These days I tend to use "asdf" for my Postgres version management. It's not as friendly, but I kind of like running my services (where n < 5) in the foreground myself so I can see errors in the console with ease, and I like that asdf handles all the tools where I have exacting version requirements consistently (and even a few I don't).
Love the simplicity of the app, used it for years! However when I started working with docker-compose stacks exposing PostgreSQL port I had to uninstall it because it all got confusing.
I switched to docker for most of my local dev these days, using this image for “pure Postgres with extensions” (PostGIS, pgRouting, pgTAP, plv8, wal2json):
Had never heard of plv8. Has anyone used it for anything at scale? Quite cool with JS directly in functions although the dynamic typing could be a bit strange …
If you like to use the ‘pg’ Ruby gem in conjunction with this app then you need to use `gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/X.Y/bin/pg_config` where X.Y refers to the correct version (IIRC you can also replace the version nr by `Latest`).
Obviously not a GUI, but WSL is pretty nice for this, even if you don't need it for anything else. You can run things like
wsl.exe -d Ubuntu -u root /some/linux/script
From powershell or the cmd.exe console. There's a bit of fiddling required to connect from windows to the WSL postgres instance, but once that's done, it's a nice setup.
Edit: You can also use WSL as a sort of "docker like" setup, using wsl --export / wsl --import to make WSL images with different versions of Postgres, start/stop them, etc. With a small distro like Alpine, it's relatively fast.
[+] [-] elnygren|4 years ago|reply
This is what I've been using for Postgres:
(this one is just latest, but adding a version is trivial)[+] [-] afavour|4 years ago|reply
Obviously everyone’s experience is different because we’re all doing different things but I mostly work with Rust and Node, I use Postgres.app as a local dev database and just run the code natively, sometimes Node via nvm when I care about specific runtime versions.
It works great. It performs better then any Docker-based solution (I’m on a Mac) and doesn’t leave me with a bunch of weird dangling images/containers/whatever taking up resources. I still like the idea of using the same Docker environment in dev that I use in production but in reality I just don’t need it.
[+] [-] nightpool|4 years ago|reply
[+] [-] Doctor_Fegg|4 years ago|reply
[+] [-] moonchrome|4 years ago|reply
[+] [-] NelsonMinar|4 years ago|reply
Sure, the Docker route is better in many ways. But perhaps you're not understanding the audience for a packaged Mac application.
[+] [-] ramraj07|4 years ago|reply
[+] [-] Macha|4 years ago|reply
[+] [-] EamonnMR|4 years ago|reply
[+] [-] mekster|4 years ago|reply
How are you meant to apply only security patches on docker containers?
What's the point of "isolating" daemons to avoid "random" files in /etc?
It just makes it harder to git control and back up /etc by splitting it all over the containers.
[+] [-] WhyNotHugo|4 years ago|reply
The idea of a "system" postgres is kinda wierd, since that single instance has to work with all my projects -- which might have conflicting needs.
[+] [-] devoutsalsa|4 years ago|reply
https://dbngin.com/
[+] [-] SkyMarshal|4 years ago|reply
[+] [-] bob1029|4 years ago|reply
This is why we use SQLite for all the things. I don't even remember what a database installation process looks like anymore. It's just a nuget dependency and some code for us.
[+] [-] Lockyy|4 years ago|reply
Hopefully a few other people have had their lives made a tiny bit easier by the redirect I set up.
[+] [-] sudhirj|4 years ago|reply
[+] [-] harg|4 years ago|reply
[+] [-] dagw|4 years ago|reply
Others (like myself) use PostgreSQL as a local datastore and analysis engine. All my interaction with the database is via ad hoc SQL commands and locally run scripts and desktop applications. For this usecase, something like this is much easier to use than docker compose.
[+] [-] mosselman|4 years ago|reply
Why is this for beginners? Because it is so easy to use? I guess I am a beginner then.
> works pretty nicely
Postgres.app works perfectly and is very minimal in system requirements vs having docker running and the amount of storage it requires.
[+] [-] DelightOne|4 years ago|reply
[+] [-] willvarfar|4 years ago|reply
[+] [-] aoms|4 years ago|reply
[+] [-] jamil7|4 years ago|reply
https://eggerapps.at/postico/
(not affiliated, just a fan)
[+] [-] Eikon|4 years ago|reply
[+] [-] kentiko|4 years ago|reply
[+] [-] b6z|4 years ago|reply
[+] [-] rubyist5eva|4 years ago|reply
Not affiliated, just an extremely happy customer.
[+] [-] elpatoisthebest|4 years ago|reply
To be fair, I use (and like) TablePlus, but it's no Postico...
[+] [-] ultrarunner|4 years ago|reply
[+] [-] Doctor_Fegg|4 years ago|reply
[+] [-] bradhe|4 years ago|reply
[+] [-] anonu|4 years ago|reply
[+] [-] lamton|4 years ago|reply
[+] [-] hestefisk|4 years ago|reply
[+] [-] fdr|4 years ago|reply
These days I tend to use "asdf" for my Postgres version management. It's not as friendly, but I kind of like running my services (where n < 5) in the foreground myself so I can see errors in the console with ease, and I like that asdf handles all the tools where I have exacting version requirements consistently (and even a few I don't).
[+] [-] boros2me|4 years ago|reply
[+] [-] doctor_eval|4 years ago|reply
[+] [-] xmodem|4 years ago|reply
I just wish there was a version of this for mySQL/MariaDB.
[+] [-] monooso|4 years ago|reply
[+] [-] kiwicopple|4 years ago|reply
https://github.com/supabase/postgres
It’s also bundled as an AWS image with pgbouncer
[+] [-] hestefisk|4 years ago|reply
[+] [-] adolph|4 years ago|reply
[+] [-] evaneykelen|4 years ago|reply
[+] [-] jacobwg|4 years ago|reply
[+] [-] shp0ngle|4 years ago|reply
[+] [-] KingOfCoders|4 years ago|reply
[+] [-] tyingq|4 years ago|reply
Edit: You can also use WSL as a sort of "docker like" setup, using wsl --export / wsl --import to make WSL images with different versions of Postgres, start/stop them, etc. With a small distro like Alpine, it's relatively fast.
[+] [-] ridruejo|4 years ago|reply
[+] [-] jrochkind1|4 years ago|reply
[+] [-] wirddin|4 years ago|reply