INSERT Issues

Started by Rod Taylorabout 25 years ago4 messageshackers
Jump to latest
#1Rod Taylor
rbt@rbt.ca

CREATE TABLE junk (
col SERIAL PRIMARY KEY
);

INSERT INTO junk (col) DEFAULT VALUES;

INSERT INTO junk DEFAULT VALUES:

Second insert works, first one fails.

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query }

The column list should just be ignored correct?

--
Rod Taylor

There are always four sides to every story: your side, their side, the
truth, and what really happened.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Rod Taylor (#1)
Re: INSERT Issues

"Rod Taylor" <rod.taylor@inquent.com> writes:

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query }

The documentation is wrong here, not the code. SQL92 defines the syntax
as

<insert statement> ::=
INSERT INTO <table name> <insert columns and source>

<insert columns and source> ::=
[ <left paren> <insert column list> <right paren> ] <query expression>
| DEFAULT VALUES

<insert column list> ::= <column name list>

regards, tom lane

#3Ross J. Reedstrom
reedstrm@rice.edu
In reply to: Rod Taylor (#1)
Re: INSERT Issues

On Thu, Apr 05, 2001 at 07:16:49PM -0400, Rod Taylor wrote:

CREATE TABLE junk (
col SERIAL PRIMARY KEY
);

INSERT INTO junk (col) DEFAULT VALUES;

INSERT INTO junk DEFAULT VALUES:

Second insert works, first one fails.

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query }

The column list should just be ignored correct?

Hmm, the BNF from SQL1992 actually is:

<insert statement> ::=
INSERT INTO <table name>
<insert columns and source>

<insert columns and source> ::=
[ <left paren> <insert column list> <right paren> ]
<query expression>
| DEFAULT VALUES

<insert column list> ::= <column name list>

So the grammar is right to reject your first example.

According to the rules for <insert statement>:

2) An <insert columns and source> that specifies DEFAULT VALUES is
equivalent to an <insert columns and source> that specifies a
<query expression> of the form

VALUES (DEFAULT, . . . )

where the number of "DEFAULT" entries is equal to the number of
columns of T.

So the proper spelling of your first version is:

INSERT INTO junk (col) VALUES (DEFAULT);

Does that work for you?

Ross

#4Rod Taylor
rbt@rbt.ca
In reply to: Rod Taylor (#1)
Re: INSERT Issues

create table junk (col SERIAL);

INSERT INTO junk (col) VALUES (DEFAULT);
ERROR: parser: parse error at or near "DEFAULT";

Show quoted text

INSERT INTO junk (col) VALUES (DEFAULT);

Does that work for you?

Ross