Daniel, your reply is awesome :) I love the historical context and it brings much clarity to the discussion! It's now understandable why the commands were named the way they were. I'm surprised that distros are making their own commands for postgres.. isn't that a bit invasive? On 1 November 2016 at 06:50, Daniel Verite <daniel@xxxxxxxxxxxxxxxx> wrote: > Samuel Williams wrote: > >> John - that's an interesting example. If it's that easy, why isn't >> that the approach given in tutorials and other documentation? What was >> the motivation for the createuser command? > > initdb, createdb and createuser existed even before Postgres > adopted SQL, back when it was developed by the University of > Berkeley. > > You can find references to these commands in the doc here: > http://db.cs.berkeley.edu/postgres-v4r2/postgres-setup.ps > which dates back from 1994. > (fun fact: there was no psql yet, the equivalent command was called > "monitor". How about that for a name that has seemingly nothing > to do with postgres? :) > > According to these old instructions, commands are installed > by default into /usr/local/postgres/bin, > so that was their namespace. They were not supposed to be mixed > with other non-postgres commands. > > That's still the case today if you run ./configure and > "make install" from the current postgresql sources: > these commands end up in /usr/local/pgsql/bin > Some installers such as the EDB installers for Windows or Unix > typically use a dedicated directory for PostgreSQL, so again its > commands don't get mixed with other stuff. > > As for the Postgresql pre-compiled packages that come with Linux > distributions, they need to respect the policy of their distros, > meaning that all user-callable commands should be in the default $PATH. > That implies that, for instance, postgresql's "createuser" ends up > in $PATH along with the system's "adduser", even though they have > hardly anything to do with each other, so yes, that's somehow > unfortunate. > But these decisions are made by packagers and distributions, not > by the PostgreSQL developers. > > Some of these commands are already documented as deprecated, > for example "createlang", which I find in Ubuntu 14.04 /usr/bin: > $ man createlang > [...] > Caution > createlang is deprecated and may be removed in a future PostgreSQL > release. Direct use of the CREATE EXTENSION command is recommended > instead. > > The same could theorically be done to createuser/dropuser or > createdb/dropdb, but there's the question of whether this would create > more harm that good, because they're much widely used in > existing scripts and tutorials. > > Note that in any case your proposal to use "pg" as an > umbrella-command wouldn't fly with these systems because pg is a > pager from the Debian's util-linux package. > > $ which pg > /usr/bin/pg > > $ man pg > PG(1) User Commands > PG(1) > > NAME > pg - browse pagewise through text files > > SYNOPSIS > pg [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [file...] > ... > > Also, the same Debian/Ubuntu systems don't have initdb or pg_ctl > in the default $PATH, as these commands are superseded > by different distro-specific pg_* commands . This is also > something that should be considered if thinking of unifying > the binaries. > > > Best regards, > -- > Daniel Vérité > PostgreSQL-powered mailer: http://www.manitou-mail.org > Twitter: @DanielVerite -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general