extra syntax on INSERT

Started by Limin Liuover 24 years ago3 messages
#1Limin Liu
limin@pumpkinnet.com

I just realized that INSERT allows us to have more syntax than the
manual said. I wonder if we want to elimiate it or keep it with more
documentation on the INSERT statment?

Here is the INSERT synopsis we have in 7.2 documentation.
==========
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query }

Assume we have,
CREATE TABLE t1 (a1 int, a2 int);
CREATE TABLE t2 (a3 int, a4 int);

INSERT INTO t2 VALUES(2, 0);
INSERT INTO t2 VALUES(2,1);

==== postgres allows to have something like ====

INSERT INTO t1 VALUES(1, 0 AS "Oops");
INSRET INTO t1 VALUES(t2.*);

===================

For the first one, I believe that is due to reusing the definition of
target_list/target_el. I didn't dig in to see how PostgreSQL handle the
second case. At least the INSRET synopsis does not cover this case.

--
Regards,
LM Liu

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Limin Liu (#1)
Re: [HACKERS] extra syntax on INSERT

Limin Liu <limin@pumpkinnet.com> writes:

I just realized that INSERT allows us to have more syntax than the
manual said. I wonder if we want to elimiate it or keep it with more
documentation on the INSERT statment?

This will likely go away when we get around to upgrading INSERT to the
full SQL spec --- certainly I'd feel no compunction about removing any
non-SQL syntax that happens to be supported now, if it gets in the way
of spec compliance.

In short, no I don't want to document it, because I don't want people
to start relying on it.

For the first one, I believe that is due to reusing the definition of
target_list/target_el.

Yes. There's not a lot of difference in the implementations of
INSERT ... VALUES and INSERT ... SELECT, at the moment.

regards, tom lane

#3Tod McQuillin
devin@spamcop.net
In reply to: Tom Lane (#2)
Re: Re: [HACKERS] extra syntax on INSERT

On Thu, 31 May 2001, Tom Lane wrote:

Limin Liu <limin@pumpkinnet.com> writes:

I just realized that INSERT allows us to have more syntax than the
manual said. I wonder if we want to elimiate it or keep it with more
documentation on the INSERT statment?

This will likely go away when we get around to upgrading INSERT to the
full SQL spec --- certainly I'd feel no compunction about removing any
non-SQL syntax that happens to be supported now, if it gets in the way
of spec compliance.

Are you talking about allowing multiple rows in one insert, like this?

INSERT into foo VALUES ((1, 2, 3), (4, 5, 6), (7, 8, 9))

That would be a nice feature to have, and I think it's consistent with
SQL-92.
--
Tod McQuillin