On Fri, Apr 10, 2020 at 5:24 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > Meh. I would argue that that's an actively BAD idea. The use-cases > are entirely different, the implementation is going to be quite a lot > different, the relevant options are going to be quite a lot different. > It will not be better for either implementors or users to force those > into the same executable.
I think Andres has a point, but on balance I am more inclined to agree with you. It may be that in the future it will make sense to organize things differently, but I would rather arrange them according to what makes sense now, and then change it later, even though that makes for some user-visible churn. The thing is that we don't really know what's going to happen in future releases, and our track record when we try to guess is very poor. Creating stuff that we hope will get extended to do this or that in a future release can end up looking really half-baked if the code doesn't get extended in the anticipated direction. I *would* like to find a way to address the proliferation of binaries, because I've got other things I'd like to do that would require creating still more of them, and until we come up with a scalable solution that makes everybody happy, there's going to be progressively more complaining every time. One possible solution is to adopt the 'git' approach and decide we're going to have one 'pg' command (or whatever we call it). I think the way that 'git' does it is that all of the real binaries are stored in a directory that users are not expected to have in their path, and the 'git' wrapper just looks for one based on the name of the subcommand. So, if you say 'git thunk', it goes and searches the private bin directory for an executable called 'git-thunk'. We could easily do this for nearly everything 'pg' related, so: clusterdb -> pg clusterdb pg_ctl -> pg ctl pg_resetwal -> pg resetwal etc. I think we'd want psql to still be separate, but I'm not sure we'd need any other exceptions. In a lot of cases it won't lead to any more typing because the current command is pg_whatever and with this approach you'd just type a space instead of an underscore. The "legacy" cases that don't start with "pg" would get a bit longer, but I wouldn't lose a lot of sleep over that myself. There are other possibilities too. We could try to pick out individual groups of commands to merge, rather than having a unified framework for everything. For instance, we could turn {cluster,create,drop,reindex,vacuum}db into one utility, {create,drop}user into another, pg_dump{,all} into a third, and so on. But this seems like it would require making a lot more awkward policy decisions, so I don't think it's a great plan. Still, we need to agree on something. It won't do to tell people that we're not going to commit patches to add more functionality to PostgreSQL because it would involve adding more binaries. Any particular piece of functionality may draw substantive objections, and that's fine, but we shouldn't stifle development categorically because we can't agree on how to clean up the namespace pollution. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company