Thread: syntax error but command executes anyway?

syntax error but command executes anyway?

From
Kevin Murphy
Date:
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)

Re: syntax error but command executes anyway?

From
"Scott Marlowe"
Date:
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.



Re: syntax error but command executes anyway?

From
Tom Lane
Date:
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

Re: syntax error but command executes anyway?

From
Kevin Murphy
Date:
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

Re: syntax error but command executes anyway?

From
Kevin Murphy
Date:
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