Thread: Re: [BUGS] BUG #7543: Invalid table alias: DELETE FROM table *
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
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. +
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