Exception in select IN with index

Started by Keith Parksover 27 years ago3 messages
#1Keith Parks
emkxp01@mtcc.demon.co.uk

Hi,

Can anyone else reproduce this problem?
(Maybe a signal handling problem on S/Linux??)

Using the regression database...

Keith.

regression=> select * from person where age in (38,68);
name |age|location
-------+---+----------
teresa | 38|(7.7,1.8)
leah | 68|(0.6,3.37)
liza | 38|(9.76,6.9)
jenifer| 38|(6.6,23.3)
sumi | 38|(1.15,0.6)
paula | 68|(0.5,0.5)
julie | 68|(3.6,7.2)
belinda| 38|(8.9,1.7)
sandy | 38|(3.8,0.2)
velma | 68|(8.8,8.9)
(10 rows)

regression=> create index p_age_idx on person (age);
CREATE
regression=> select * from person where age in (38,68);
ERROR: floating point exception! The last floating point operation either
exceeded legal ranges or was a divide by zero
regression=> drop index p_age_idx;
DROP
regression=> select * from person where age in (38,68);
name |age|location
-------+---+----------
teresa | 38|(7.7,1.8)
leah | 68|(0.6,3.37)
liza | 38|(9.76,6.9)
jenifer| 38|(6.6,23.3)
sumi | 38|(1.15,0.6)
paula | 68|(0.5,0.5)
julie | 68|(3.6,7.2)
belinda| 38|(8.9,1.7)
sandy | 38|(3.8,0.2)
velma | 68|(8.8,8.9)
(10 rows)

regression=>

Here's a trace.

Program received signal SIGFPE, Arithmetic exception.
0x931c4 in create_or_index_paths (root=0x1d7d10, rel=0x1efb90, clauses=0x1f9270)
at orindxpath.c:128
128 t_list = lappend(t_list, pathnode);
(gdb) bt
#0 0x931c4 in create_or_index_paths (root=0x1d7d10, rel=0x1efb90,
clauses=0x1f9270) at orindxpath.c:128
#1 0x8f0fc in find_rel_paths (root=0x1d7d10, rels=0x1f9510) at allpaths.c:130
#2 0x8f06c in find_paths (root=0x1d7d10, rels=0x1f9510) at allpaths.c:77
#3 0x94d48 in subplanner (root=0x1d7d10, flat_tlist=0x1f96f0, qual=0x1f9950) at
planmain.c:279
#4 0x94c30 in query_planner (root=0x1d7d10, command_type=1, tlist=0x1f43f0,
qual=0x1f9950) at planmain.c:183
#5 0x953c0 in union_planner (parse=0x1d7d10) at planner.c:151
#6 0x95228 in planner (parse=0x1d7d10) at planner.c:72
#7 0xccf1c in pg_parse_and_plan (query_string=0xefffd1a0 "select * from person
where age in (38,68);",
typev=0x0, nargs=0, queryListP=0xefffd09c, dest=Remote, aclOverride=0
'\000') at postgres.c:626
#8 0xcd040 in pg_exec_query_dest (query_string=0xefffd1a0 "select * from person
where age in (38,68);",
dest=Remote, aclOverride=0 '\000') at postgres.c:720
#9 0xccff4 in pg_exec_query (query_string=0xefffd1a0 "select * from person
where age in (38,68);")
at postgres.c:697
#10 0xce2e4 in PostgresMain (argc=10, argv=0xeffff268, real_argc=10,
real_argv=0xeffffd84) at postgres.c:1611
#11 0xb1fcc in DoBackend (port=0x12d800) at postmaster.c:1528
#12 0xb1a44 in BackendStartup (port=0x190c00) at postmaster.c:1299
#13 0xb0ebc in ServerLoop () at postmaster.c:757
#14 0xb0a04 in PostmasterMain (argc=0, argv=0xeffffd84) at postmaster.c:563
#15 0x83870 in main (argc=10, argv=0xeffffd84) at main.c:93
(gdb) print t_list
$1 = (List *) 0x0
(gdb) print pathnode
$2 = (IndexPath *) 0x1ef210
(gdb) print *pathnode
$3 = {path = {type = T_IndexPath, parent = 0x1efb90, path_cost = 4.0999999,
pathtype = T_IndexScan,
p_ordering = {ordtype = MERGE_ORDER, ord = {sortop = 0x0, merge = 0x0}},
keys = 0x0, outerjoincost = 0,
joinid = 0x0, locclauseinfo = 0x0}, indexid = 0x1e5dd0, indexqual =
0x1e5b90, indexkeys = 0x0}
(gdb)

#2Thomas A. Szybist
szybist@boxhill.com
In reply to: Keith Parks (#1)
Re: [HACKERS] Exception in select IN with index

In message <199809121356.OAA21197@mtcc.demon.co.uk>, Keith Parks writes:

Hi,

Can anyone else reproduce this problem?
(Maybe a signal handling problem on S/Linux??)

Using the regression database...

Keith.

regression=> select * from person where age in (38,68);
name |age|location
-------+---+----------
teresa | 38|(7.7,1.8)
leah | 68|(0.6,3.37)
liza | 38|(9.76,6.9)
jenifer| 38|(6.6,23.3)
sumi | 38|(1.15,0.6)
paula | 68|(0.5,0.5)
julie | 68|(3.6,7.2)
belinda| 38|(8.9,1.7)
sandy | 38|(3.8,0.2)
velma | 68|(8.8,8.9)
(10 rows)

regression=> create index p_age_idx on person (age);
CREATE
regression=> select * from person where age in (38,68);
ERROR: floating point exception! The last floating point operation either
exceeded legal ranges or was a divide by zero
regression=> drop index p_age_idx;
DROP
regression=> select * from person where age in (38,68);
name |age|location
-------+---+----------
teresa | 38|(7.7,1.8)
leah | 68|(0.6,3.37)
liza | 38|(9.76,6.9)
jenifer| 38|(6.6,23.3)
sumi | 38|(1.15,0.6)
paula | 68|(0.5,0.5)
julie | 68|(3.6,7.2)
belinda| 38|(8.9,1.7)
sandy | 38|(3.8,0.2)
velma | 68|(8.8,8.9)
(10 rows)

regression=>

Here's a trace.

Program received signal SIGFPE, Arithmetic exception.
0x931c4 in create_or_index_paths (root=0x1d7d10, rel=0x1efb90, clauses=0x1f9270)
at orindxpath.c:128
128 t_list = lappend(t_list, pathnode);
(gdb) bt
#0 0x931c4 in create_or_index_paths (root=0x1d7d10, rel=0x1efb90,
clauses=0x1f9270) at orindxpath.c:128
#1 0x8f0fc in find_rel_paths (root=0x1d7d10, rels=0x1f9510) at allpaths.c:130
#2 0x8f06c in find_paths (root=0x1d7d10, rels=0x1f9510) at allpaths.c:77
#3 0x94d48 in subplanner (root=0x1d7d10, flat_tlist=0x1f96f0, qual=0x1f9950) at
planmain.c:279
#4 0x94c30 in query_planner (root=0x1d7d10, command_type=1, tlist=0x1f43f0,
qual=0x1f9950) at planmain.c:183
#5 0x953c0 in union_planner (parse=0x1d7d10) at planner.c:151
#6 0x95228 in planner (parse=0x1d7d10) at planner.c:72
#7 0xccf1c in pg_parse_and_plan (query_string=0xefffd1a0 "select * from person
where age in (38,68);",
typev=0x0, nargs=0, queryListP=0xefffd09c, dest=Remote, aclOverride=0
'\000') at postgres.c:626
#8 0xcd040 in pg_exec_query_dest (query_string=0xefffd1a0 "select * from person
where age in (38,68);",
dest=Remote, aclOverride=0 '\000') at postgres.c:720
#9 0xccff4 in pg_exec_query (query_string=0xefffd1a0 "select * from person
where age in (38,68);")
at postgres.c:697
#10 0xce2e4 in PostgresMain (argc=10, argv=0xeffff268, real_argc=10,
real_argv=0xeffffd84) at postgres.c:1611
#11 0xb1fcc in DoBackend (port=0x12d800) at postmaster.c:1528
#12 0xb1a44 in BackendStartup (port=0x190c00) at postmaster.c:1299
#13 0xb0ebc in ServerLoop () at postmaster.c:757
#14 0xb0a04 in PostmasterMain (argc=0, argv=0xeffffd84) at postmaster.c:563
#15 0x83870 in main (argc=10, argv=0xeffffd84) at main.c:93
(gdb) print t_list
$1 = (List *) 0x0
(gdb) print pathnode
$2 = (IndexPath *) 0x1ef210
(gdb) print *pathnode
$3 = {path = {type = T_IndexPath, parent = 0x1efb90, path_cost = 4.0999999,
pathtype = T_IndexScan,
p_ordering = {ordtype = MERGE_ORDER, ord = {sortop = 0x0, merge = 0x0}},
keys = 0x0, outerjoincost = 0,
joinid = 0x0, locclauseinfo = 0x0}, indexid = 0x1e5dd0, indexqual =
0x1e5b90, indexkeys = 0x0}
(gdb)

Sorry Keith, It works on my Sparc 20 running S/Linux. I'm using a cvs copy
from sometime on Sept 10. It also works on my solaris 2.6 box (ultra 30).

Tom Szybist
szybist@boxhill.com

#3Keith Parks
emkxp01@mtcc.demon.co.uk
In reply to: Thomas A. Szybist (#2)
Re: [HACKERS] Exception in select IN with index

Thomas A. Szybist <szybist@boxhill.com>

In message <199809121356.OAA21197@mtcc.demon.co.uk>, Keith Parks writes:

Hi,

Can anyone else reproduce this problem?
(Maybe a signal handling problem on S/Linux??)

Using the regression database...

Keith.

<snip>

regression=> create index p_age_idx on person (age);
CREATE
regression=> select * from person where age in (38,68);
ERROR: floating point exception! The last floating point operation either
exceeded legal ranges or was a divide by zero

<snip>

Sorry Keith, It works on my Sparc 20 running S/Linux. I'm using a cvs copy
from sometime on Sept 10. It also works on my solaris 2.6 box (ultra 30).

Thanks Tom,

Panic over, I've just upgraded my kernel to 2.0.35 and that seems to have
fixed it. I remembered that there was a math emulation (or lack of)
problem in S/Linux that was fixed in the newer ones.

Thanks for the response,
Keith.