syntax error but command executes anyway?

Started by Kevin Murphyalmost 22 years ago5 messagesgeneral
Jump to latest
#1Kevin Murphy
murphy@genome.chop.edu

Using PG 7.4.3 on Mac OS X 10.2.8, the following "insert into ... select ..."
statement completed and then announced a syntax error, which seems bizarre.

(Don't be confused by the fact that the two tables referred to
(public.identifiers and original.identifiers) have slightly different column
names.)

egenome_dev=# \!cat /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT INTO public.identifiers (element_id, name, source, source_code, title)
SELECT DISTINCT
elementid,
name,
source,
sourcecode,
title
FROM original.identifiers;
egenome_dev=# \i /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT 0 1672036
psql:/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql:15: ERROR:
syntax error at or near "sourcecode" at character 2

A fuller psql transcript showing table layouts is below.

What should I make of this?

Thanks,
Kevin Murphy

P.S. Full transcript:

egenome_dev=# \d original.identifiers
Table "original.identifiers"
Column | Type | Modifiers
------------+-----------------------+-----------
elementid | integer |
nameid | character varying(80) |
name | character varying(80) |
source | character varying(39) |
title | text |
sourcecode | character varying(2) |
Indexes:
"identifiers_elementid_idx" btree (elementid)
"identifiers_name_idx" btree (name)
"identifiers_nameid_idx" btree (nameid)
"identifiers_source_idx" btree (source)

egenome_dev=# select count(*) from original.identifiers;
count
---------
1685440
(1 row)

egenome_dev=# \d identifiers
Table "public.identifiers"
Column | Type | Modifiers
-------------+-----------------------+-----------
element_id | integer |
name | character varying(80) |
source | character varying(39) |
source_code | character varying(2) |
title | text |
Indexes:
"identifiers_multi1_idx" btree (name, source)
"identifiers_name_idx" btree (name)

[NOTE: the above indexes on original.identifiers are not the intended final
indexes; in fact, I had forgotten that they were there.]

egenome_dev=# truncate identifiers;
TRUNCATE TABLE

egenome_dev=# \!cat /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT INTO public.identifiers (element_id, name, source, source_code, title)
SELECT DISTINCT
elementid,
name,
source,
sourcecode,
title
FROM original.identifiers;

egenome_dev=# \i /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT 0 1672036
psql:/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql:15: ERROR:
syntax error at or near "sourcecode" at character 2

egenome_dev=# select count(*) from identifiers;
count
---------
1672036
(1 row)

#2Scott Marlowe
smarlowe@qwest.net
In reply to: Kevin Murphy (#1)
Re: syntax error but command executes anyway?

On Sat, 2004-06-19 at 07:14, Kevin Murphy wrote:

Using PG 7.4.3 on Mac OS X 10.2.8, the following "insert into ... select ..."
statement completed and then announced a syntax error, which seems bizarre.

It's not actually inserting anything...

(Don't be confused by the fact that the two tables referred to
(public.identifiers and original.identifiers) have slightly different column
names.)

egenome_dev=# \!cat /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT INTO public.identifiers (element_id, name, source, source_code, title)
SELECT DISTINCT
elementid,
name,
source,
sourcecode,
title
FROM original.identifiers;
egenome_dev=# \i /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT 0 1672036

This INSERT 0 part tells you it didn't actually insert anything.
Since I don't see any obvious error, I'm wondering if maybe there are
characters in the sql file that don't print that are causing this
problem. Try recreating the SQL by hand and see if you get the same
problem. Use the simplest editor on your system, like vi or notepad or
whatever.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Kevin Murphy (#1)
Re: syntax error but command executes anyway?

Kevin Murphy <murphy@genome.chop.edu> writes:

What should I make of this?

egenome_dev=# \!cat /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT INTO public.identifiers (element_id, name, source, source_code, title)
SELECT DISTINCT
elementid,
name,
source,
sourcecode,
title
FROM original.identifiers;

egenome_dev=# \i /Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT 0 1672036
psql:/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql:15: ERROR:
syntax error at or near "sourcecode" at character 2

It seems mighty suspicious that psql is reporting a syntax error at line
15 of the file when cat is only showing 9 lines. I suspect that the
insert you are showing us did execute, but then something further on
in the file is producing the syntax error.

I am wondering whether cat on OS X stops at embedded nulls, or something
stupid like that. It sure looks like there must be garbage in the
port_identifiers.sql file beyond what cat has printed here. What do you
see when you examine the file with other tools? (Try "od -c" if nothing
else springs to mind.)

It is possible that the problem is not entirely cat's fault but has
something to do with the way that psql's \! command invokes cat.
Does cat at the shell prompt produce the same output?

regards, tom lane

#4Kevin Murphy
murphy@genome.chop.edu
In reply to: Scott Marlowe (#2)
Re: syntax error but command executes anyway?

Scott,

egenome_dev=# \i
/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql
INSERT 0 1672036

This INSERT 0 part tells you it didn't actually insert anything.

Actually, that's not true. I didn't know what this number was until just now,
but I looked it up: for a single-row insert, it's the OID of the new row;
otherwise, it's 0. The 1672036, on the other hand, means that 1,672,036 rows
were inserted.

-Kevin Murphy

#5Kevin Murphy
murphy@genome.chop.edu
In reply to: Tom Lane (#3)
Re: syntax error but command executes anyway?

On Saturday 19 June 2004 06:57 pm, Tom Lane wrote:

egenome_dev=# \i
/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql INSERT 0
1672036
psql:/Users/murphy/cvs/egora/sql/data_port/port_identifiers.sql:15:
ERROR: syntax error at or near "sourcecode" at character 2

It seems mighty suspicious that psql is reporting a syntax error at line
15 of the file when cat is only showing 9 lines. I suspect that the
insert you are showing us did execute, but then something further on
in the file is producing the syntax error.

I am wondering whether cat on OS X stops at embedded nulls, or something
stupid like that. It sure looks like there must be garbage in the
port_identifiers.sql file beyond what cat has printed here. What do you
see when you examine the file with other tools? (Try "od -c" if nothing
else springs to mind.)

It is possible that the problem is not entirely cat's fault but has
something to do with the way that psql's \! command invokes cat.
Does cat at the shell prompt produce the same output?

regards, tom lane

It is indeed very weird, since the script is not that long. I piped it
through 'od -a' to confirm.

However, I retract my complaint, since I can't reproduce it!

I had to take a bad DIMM out of this machine a few days ago; maybe I need to
run that memory test again. Still, it would seem remarkable if a memory
error could produce my initial results rather than a crash or hang. I am
also feeling like compiling PG again, since it was initially compiled with
that bad DIMM (but again, what would the odds be?)

Tom, as always, thanks for your mellow and rapid response to questions.

I'll let you know if this crops up again in a reproducible way.

-Kevin Murphy