Обсуждение: Renaming some binaries

Поиск
Список
Период
Сортировка

Renaming some binaries

От
Euler Taveira
Дата:
Hi,

I'm bringing this $subject into discussion again. Historically, we are
carrying binary names that have been confused newbies. createuser is the
worst name so for. Also, names like createdb, initdb, reindexdb, and
droplang does not suggest what product it is referring to. Adding a
prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
about this change, I suggest renaming the following binaries:

clusterdb
createdb
createlang
createuser
dropdb
droplang
dropuser
initdb
oid2name
reindexdb
vacuumdb
vacuumlo

Another major change related to this topic is assemble functionalities
from binaries. We currently have 34 binaries (is that a lot for a single
software?). Also, some of them have the same principle: execute a
administrative or maintenance command. IMHO, from the list above, we
could reduce it to:

pg_command: clusterdb, createdb, dropdb, createuser, dropuser,
createlang, droplang, reindexdb, vacuumdb, vacuumlo. It also has the
advantage to allow adding new administrative/maintenance commands to it
in the future;
pg_oid2name: I don't have a strong opinion that it fits in pg_command;
initdb: we already have 'pg_ctl init' (since 9.0) and could remove initdb.

Opinions?


--   Euler Taveira                   Timbira - http://www.timbira.com.br/  PostgreSQL: Consultoria, Desenvolvimento,
Suporte24x7 e Treinamento
 



Re: Renaming some binaries

От
David Fetter
Дата:
On Fri, Aug 26, 2016 at 01:26:39PM -0300, Euler Taveira wrote:
> Hi,
> 
> I'm bringing this $subject into discussion again. Historically, we are
> carrying binary names that have been confused newbies. createuser is the
> worst name so for. Also, names like createdb, initdb, reindexdb, and
> droplang does not suggest what product it is referring to. Adding a
> prefix (pg_, pg, ...) would 'make things clear'.

+1 for pg_ .  We should have done this long ago, but this is better
fixed than left broken.

> If we have a consensus
> about this change, I suggest renaming the following binaries:
> 
> clusterdb
> createdb
> createlang
> createuser
> dropdb
> droplang
> dropuser
> initdb
> oid2name
> reindexdb
> vacuumdb
> vacuumlo
> 
> Another major change related to this topic is assemble functionalities
> from binaries. We currently have 34 binaries (is that a lot for a single
> software?). Also, some of them have the same principle: execute a
> administrative or maintenance command. IMHO, from the list above, we
> could reduce it to:
> 
> pg_command: clusterdb, createdb, dropdb, createuser, dropuser,
> createlang, droplang, reindexdb, vacuumdb, vacuumlo. It also has the
> advantage to allow adding new administrative/maintenance commands to it
> in the future;

Would these make sense as pg_ctl options, or are you separating them
out because they're not instance-wide?  If separating them is
important on those grounds, how about something like pg_db or
pg_db_command?

> pg_oid2name: I don't have a strong opinion that it fits in pg_command;

I vaguely knew that this existed, but I can't recall having heard of
anybody actually using it.  I suppose it's under pg_ctl if the split
above between instance-wide and db-specific holds.

> initdb: we already have 'pg_ctl init' (since 9.0) and could remove initdb.
> 
> Opinions?

+1 for removing initdb.

Best,
David.
-- 
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david(dot)fetter(at)gmail(dot)com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate



Re: Renaming some binaries

От
Euler Taveira
Дата:
On 26-08-2016 14:03, David Fetter wrote:
> Would these make sense as pg_ctl options, or are you separating them
> out because they're not instance-wide?  If separating them is
> important on those grounds, how about something like pg_db or
> pg_db_command?
> 
It doesn't make sense because pg_ctl is server-side and pg_command would
be client-side.

>> pg_oid2name: I don't have a strong opinion that it fits in pg_command;
> 
> I vaguely knew that this existed, but I can't recall having heard of
> anybody actually using it.  I suppose it's under pg_ctl if the split
> above between instance-wide and db-specific holds.
> 
I don't use it for a long time. It also a client-side binary then better
place for it is pg_command. BTW, is anybody using it? If so, we could
add this functionality to psql and remove it.


--   Euler Taveira                   Timbira - http://www.timbira.com.br/  PostgreSQL: Consultoria, Desenvolvimento,
Suporte24x7 e Treinamento
 



Re: Renaming some binaries

От
Simon Riggs
Дата:
On 26 August 2016 at 18:26, Euler Taveira <euler@timbira.com.br> wrote:

> I'm bringing this $subject into discussion again. Historically, we are
> carrying binary names that have been confused newbies. createuser is the
> worst name so for. Also, names like createdb, initdb, reindexdb, and
> droplang does not suggest what product it is referring to. Adding a
> prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
> about this change, I suggest renaming the following binaries:
>
> clusterdb
> createdb
> createlang
> createuser
> dropdb
> droplang
> dropuser
> initdb
> oid2name
> reindexdb
> vacuumdb
> vacuumlo

Why not just remove them all and change the docs to suggest using

psql -c "CREATE DATABASE foo"
etc

Less code, no confusion because we have just one client tool - psql.

Almost all serious users will be issuing more than one DDL command at
a time, so they'll be writing a script anyway.

-- 
Simon Riggs                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: Renaming some binaries

От
Andres Freund
Дата:
On 2016-08-26 22:01:58 +0200, Simon Riggs wrote:
> On 26 August 2016 at 18:26, Euler Taveira <euler@timbira.com.br> wrote:
> 
> > I'm bringing this $subject into discussion again. Historically, we are
> > carrying binary names that have been confused newbies. createuser is the
> > worst name so for. Also, names like createdb, initdb, reindexdb, and
> > droplang does not suggest what product it is referring to. Adding a
> > prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
> > about this change, I suggest renaming the following binaries:
> >
> > clusterdb
> > createdb
> > createlang
> > createuser
> > dropdb
> > droplang
> > dropuser
> > initdb
> > oid2name
> > reindexdb
> > vacuumdb
> > vacuumlo
> 
> Why not just remove them all and change the docs to suggest using
> 
> psql -c "CREATE DATABASE foo"
> etc
> 
> Less code, no confusion because we have just one client tool - psql.

Several of them have the ability to connect to several databases, some
even do that in parallel.



Re: Renaming some binaries

От
Larry Rosenman
Дата:
On 2016-08-26 15:03, Andres Freund wrote:
> On 2016-08-26 22:01:58 +0200, Simon Riggs wrote:
>> On 26 August 2016 at 18:26, Euler Taveira <euler@timbira.com.br> 
>> wrote:
>> 
>> > I'm bringing this $subject into discussion again. Historically, we are
>> > carrying binary names that have been confused newbies. createuser is the
>> > worst name so for. Also, names like createdb, initdb, reindexdb, and
>> > droplang does not suggest what product it is referring to. Adding a
>> > prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
>> > about this change, I suggest renaming the following binaries:
>> >
>> > clusterdb
>> > createdb
>> > createlang
>> > createuser
>> > dropdb
>> > droplang
>> > dropuser
>> > initdb
>> > oid2name
>> > reindexdb
>> > vacuumdb
>> > vacuumlo
>> 
>> Why not just remove them all and change the docs to suggest using
>> 
>> psql -c "CREATE DATABASE foo"
>> etc
>> 
>> Less code, no confusion because we have just one client tool - psql.
> 
> Several of them have the ability to connect to several databases, some
> even do that in parallel.

vacuumdb being one that I've needed recently to do a number of DB's in a 
row.


-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 214-642-9640                 E-Mail: ler@lerctr.org
US Mail: 17716 Limpia Crk, Round Rock, TX 78664-7281



Re: Renaming some binaries

От
Alvaro Herrera
Дата:
Simon Riggs wrote:
> On 26 August 2016 at 18:26, Euler Taveira <euler@timbira.com.br> wrote:
> 
> > I'm bringing this $subject into discussion again. Historically, we are
> > carrying binary names that have been confused newbies. createuser is the
> > worst name so for. Also, names like createdb, initdb, reindexdb, and
> > droplang does not suggest what product it is referring to. Adding a
> > prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
> > about this change, I suggest renaming the following binaries:
> Why not just remove them all and change the docs to suggest using
> 
> psql -c "CREATE DATABASE foo"

I agree that some of these commands are redundant, and that we seem to
have them just because we can, not because they provide useful
functionality:
createdb createlang createuser dropdb droplang dropuser

I would rather have a single command that can do all those actions.
We could have things like pg_ctl createuser

I agree with Simon that many "serious users" would not be using
the shell to implement this functionality, but something higher-level (a
GUI, some web app) that's going to go through SQL instead.  Still, for
ad-hoc admin tasks it seems convenient to have the shell interface.

Nowadays git and many other programs have a model where a single command
(git) can call a number of different binaries which are not in PATH
(/usr/lib/git-core in my installation).  We could do something similar,
where little else apart from pg_ctl, pg_dump, pgbench are in path, and
most binaries are in some hidden binary directory known to pg_ctl.

pg_ctl vacuum -j4 <database>


(Personally, I very often have postmaster running on its own terminal
with output to stderr.  It'd be a little sad to lose that functionality,
but what value does it offer to regular users?  I can script my way
around its lack, if needed.)

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: Renaming some binaries

От
Tomas Vondra
Дата:
On 08/26/2016 07:03 PM, David Fetter wrote:
> On Fri, Aug 26, 2016 at 01:26:39PM -0300, Euler Taveira wrote:
>> Hi,
>>
...>>
>> initdb: we already have 'pg_ctl init' (since 9.0) and could remove initdb.
>>
>> Opinions?
>
> +1 for removing initdb.
>

We can't just remove it because pg_ctl actually calls initdb, so we 
would have to move the code from src/bin/initdb to src/bin/pg_ctl. Which 
is doable, but I assume we'd also change how we pass parameters to it - 
right now we have to do this:

pg_ctl init -o "... initdb params ..."

But I assume we'd change this to regular parameters, if 'init' gets 
merged into pg_ctl - otherwise we'd force users to construct the param 
string only to immediately parse it (currently the "system()" call does 
that for us, but we'd have to implement that in pg_ctl).

That however means that not only we break the scripts for all those 
calling initdb directly (and there's quite a few of them, I'm sure, 
exactly because it's simpler to pass the parameters directly), but also 
for all those already using pg_ctl.

regards

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: Renaming some binaries

От
David Fetter
Дата:
On Fri, Aug 26, 2016 at 04:33:47PM -0300, Euler Taveira wrote:
> On 26-08-2016 14:03, David Fetter wrote:
> > Would these make sense as pg_ctl options, or are you separating them
> > out because they're not instance-wide?  If separating them is
> > important on those grounds, how about something like pg_db or
> > pg_db_command?
> > 
> It doesn't make sense because pg_ctl is server-side and pg_command would
> be client-side.

Perfect!

> >> pg_oid2name: I don't have a strong opinion that it fits in pg_command;
> > 
> > I vaguely knew that this existed, but I can't recall having heard of
> > anybody actually using it.  I suppose it's under pg_ctl if the split
> > above between instance-wide and db-specific holds.
> > 
> I don't use it for a long time. It also a client-side binary then better
> place for it is pg_command. BTW, is anybody using it? If so, we could
> add this functionality to psql and remove it.

Sure.  For server versions 10 or better, it could be a call to a new
server-side function.

Best,
David.
-- 
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david(dot)fetter(at)gmail(dot)com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate



Re: Renaming some binaries

От
Andres Freund
Дата:
On 2016-08-26 13:26:39 -0300, Euler Taveira wrote:
> I'm bringing this $subject into discussion again. Historically, we are
> carrying binary names that have been confused newbies. createuser is the
> worst name so for. Also, names like createdb, initdb, reindexdb, and
> droplang does not suggest what product it is referring to. Adding a
> prefix (pg_, pg, ...) would 'make things clear'. If we have a consensus
> about this change, I suggest renaming the following binaries:
>
> clusterdb
> createdb
> createlang
> createuser
> dropdb
> droplang
> dropuser
> initdb
> oid2name
> reindexdb
> vacuumdb
> vacuumlo

Uhm, that'd need a careful backward compatibility plan, including a period of
supporting both names.


> Another major change related to this topic is assemble functionalities
> from binaries. We currently have 34 binaries

> (is that a lot for a single software?).

Does it matter? The few bytes of disk space are essentially irrelevant.

That said, on the code level, there'd be considerable benefit of coalescing:


> pg_command: clusterdb, createdb, dropdb, createuser, dropuser,
> createlang, droplang, reindexdb, vacuumdb, vacuumlo.

these commands. We could do the old trick of leaving the old names as in
place as symlinks.


> initdb: we already have 'pg_ctl init' (since 9.0) and could remove
> initdb.

I fairly strongly against removing initdb as a separate binary. Issuies
during cluster creation are already annoying to debug.



This is a *significant* amount of work, it'll make backpatching a
nightmare (although not that much happens in these binaries). I
personally see better uses of my time.


Andres



Re: Renaming some binaries

От
Peter Eisentraut
Дата:
On 8/26/16 12:26 PM, Euler Taveira wrote:
> initdb: we already have 'pg_ctl init' (since 9.0) and could remove initdb.

I have a concern specifically about pg_ctl.  Depending on how your
PostgreSQL is packaged, not all of the pg_ctl actions are safe or
sensible to run.  For example, if you are using systemd, then using
pg_ctl restart will probably not do the right thing.  And depending on
SELinux (maybe), running initdb directly might also not do the right
thing.  In most cases, you can just not use pg_ctl and do all these
things differently, but for example pg_ctl promote is the only
documented way to do that thing.

Until we have a better way to figure that out, I wouldn't want to put
more things into pg_ctl, especially as the only way.

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: Renaming some binaries

От
Robert Haas
Дата:
On Fri, Aug 26, 2016 at 5:42 PM, Peter Eisentraut
<peter.eisentraut@2ndquadrant.com> wrote:
> On 8/26/16 12:26 PM, Euler Taveira wrote:
>> initdb: we already have 'pg_ctl init' (since 9.0) and could remove initdb.
>
> I have a concern specifically about pg_ctl.  Depending on how your
> PostgreSQL is packaged, not all of the pg_ctl actions are safe or
> sensible to run.  For example, if you are using systemd, then using
> pg_ctl restart will probably not do the right thing.  And depending on
> SELinux (maybe), running initdb directly might also not do the right
> thing.  In most cases, you can just not use pg_ctl and do all these
> things differently, but for example pg_ctl promote is the only
> documented way to do that thing.
>
> Until we have a better way to figure that out, I wouldn't want to put
> more things into pg_ctl, especially as the only way.

+1.  Actually, my reasons for not wanting to put more stuff into
pg_ctl are mostly different from yours, but I endorse the conclusion,
at least.  I think that it's just not going to be convenient.  initdb
is a complicated command with a bunch of options that are mostly all
different from the options to pg_ctl.  If we merge the two, then
either pg_ctl has to be able to parse the initdb options and pass them
through, or else you have to have some other convention for passing
arguments through to initdb, like pg_ctl init -o "-X /ssd/foo" which
is really not that much fun to remember or type, especially if the
path has spaces in it and thus requires some kind of nested quoting.

I do think it would make sense to add "pg_" to the beginning of all of
most or all of the command names.  And I do think it would make sense
to just get rid of the scripts that don't do anything more than run a
single command via psql.  Binaries that offer additional functionality
we might as well keep.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company