Re: pg_receivewal makes a bad daemon - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: pg_receivewal makes a bad daemon |
Date | |
Msg-id | CA+TgmoZf2smgAjQyTGNHH93zNkVppJm1UnXfsreYpsx8ouyoPw@mail.gmail.com Whole thread Raw |
In response to | Re: pg_receivewal makes a bad daemon (Magnus Hagander <magnus@hagander.net>) |
Responses |
Re: pg_receivewal makes a bad daemon
Re: pg_receivewal makes a bad daemon Re: pg_receivewal makes a bad daemon |
List | pgsql-hackers |
On Wed, May 5, 2021 at 12:34 PM Magnus Hagander <magnus@hagander.net> wrote: > Is this really a problem we should fix ourselves? Most daemon-managers > today will happily be configured to automatically restart a daemon on > failure with a single setting since a long time now. E.g. in systemd > (which most linuxen uses now) you just set Restart=on-failure (or > maybe even Restart=always) and something like RestartSec=10. > > That said, it wouldn't cover an fsync() error -- they will always > restart. The way to handle that is for the operator to capture the > error message perhaps, and just "deal with it"? Maybe, but if that's really a non-problem, why does postgres itself restart, and have facilities to write and rotate log files? I feel like this argument boils down to "a manual transmission ought to be good enough for anyone, let's not have automatics." But over the years people have found that automatics are a lot easier to drive. It may be true that if you know just how to configure your system's daemon manager, you can make all of this work, but it's not like we document how to do any of that, and it's probably not the same on every platform - Windows in particular - and, really, why should people have to do this much work? If I want to run postgres in the background I can just type 'pg_ctl start'. I could even put 'pg_ctl start' in my crontab to make sure it gets restarted within a few minutes even if the postmaster dies. If I want to keep pg_receivewal running all the time ... I need a whole pile of extra mechanism to work around its inherent fragility. Documenting how that's typically done on modern systems, as you propose further on, would be great, but I can't do it, because I don't know how to make it work. Hence the thread. > Also, all the above also apply to pg_recvlogical, right? So if we do > want to invent our own daemon-init-system, we should probably do one > more generic that can handle both. Yeah. And I'm not really 100% convinced that trying to patch this functionality into pg_receive{wal,logical} is the best way forward ... but I'm not entirely convinced that it isn't, either. I think one of the basic problems with trying to deploy PostgreSQL in 2021 is that it needs so much supporting infrastructure and so much babysitting. archive_command has to be a complicated, almost magical program we don't provide, and we don't even tell you in the documentation that you need it. If you don't want to use that, you can stream with pg_receivewal instead, but now you need a complicated daemon-runner mechanism that we don't provide or document the need for. You also probably need a connection pooler that we don't provide, a failover manager that we don't provide, and backup management software that we don't provide. And the interfaces that those tools have to work with are so awkward and primitive that even the tool authors can't always get it right. So I'm sort of unimpressed by any arguments that boil down to "what we have is good enough" or "that's the job of some other piece of software". Too many things are the job of some piece of software that doesn't really exist, or is only available on certain platforms, or that has some other problem that makes it not usable for everyone. People want to be able to download and use PostgreSQL without needing a whole library of other bits and pieces from around the Internet. -- Robert Haas EDB: http://www.enterprisedb.com
pgsql-hackers by date: