Thread: Re: [BUGS] BUG #7543: Invalid table alias: DELETE FROM table *

Re: [BUGS] BUG #7543: Invalid table alias: DELETE FROM table *

From
Tom Lane
Date:
barrybrown@sierracollege.edu writes:
> I sometime see my users delete all rows from a table using a command like
> this:

> DELETE FROM customer *;

> The question is: what is the star? Is it a table alias or an
> output_expression?

Neither; it specifies to search the table and its inheritance children,
ie, the opposite of ONLY.  This has been the default behavior (unless
you change the setting of sql_inheritance) for many years, so "*" has
largely fallen into disuse; but it's still accepted.

However ... I went looking for documentation on this point, and I'm
darned if I can find any.  There certainly used to be some, but
apparently somebody got over-eager about editing the docs to reflect
the modern default behavior.  The "*" doesn't even appear in the syntax
summaries for most of the commands where it's allowed, which is flat
wrong --- anywhere you can write "ONLY tablename", it's valid to write
"tablename*" instead.

So we have some docs work to do.  Thanks for pointing it out.

            regards, tom lane


Re: [BUGS] BUG #7543: Invalid table alias: DELETE FROM table *

From
Bruce Momjian
Date:
On Sun, Sep 16, 2012 at 11:58:06PM -0400, Tom Lane wrote:
> barrybrown@sierracollege.edu writes:
> > I sometime see my users delete all rows from a table using a command like
> > this:
>
> > DELETE FROM customer *;
>
> > The question is: what is the star? Is it a table alias or an
> > output_expression?
>
> Neither; it specifies to search the table and its inheritance children,
> ie, the opposite of ONLY.  This has been the default behavior (unless
> you change the setting of sql_inheritance) for many years, so "*" has
> largely fallen into disuse; but it's still accepted.
>
> However ... I went looking for documentation on this point, and I'm
> darned if I can find any.  There certainly used to be some, but
> apparently somebody got over-eager about editing the docs to reflect
> the modern default behavior.  The "*" doesn't even appear in the syntax
> summaries for most of the commands where it's allowed, which is flat
> wrong --- anywhere you can write "ONLY tablename", it's valid to write
> "tablename*" instead.
>
> So we have some docs work to do.  Thanks for pointing it out.

Is there any value to having * vs just not using ONLY?  I am not sure
documenting this is helping us, and it would add more clutter.  Isn't
this like how we don't document the old COPY syntax.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +


Re: [BUGS] BUG #7543: Invalid table alias: DELETE FROM table *

From
Tom Lane
Date:
Bruce Momjian <bruce@momjian.us> writes:
> Is there any value to having * vs just not using ONLY?  I am not sure
> documenting this is helping us, and it would add more clutter.  Isn't
> this like how we don't document the old COPY syntax.

I beg your pardon?  The old COPY syntax certainly is documented; see
the bottom of the COPY reference page.

We can't just not document it, or we'll get complaints exactly like
this one.  I'm not sure how come we didn't get some sooner.

            regards, tom lane