Thread: syntax error but command executes anyway?
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)
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.
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
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
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