Thread

  1. Re: [HACKERS] Exception in select IN with index

    Thomas A. Szybist <szybist@boxhill.com> — 1998-09-12T15:35:46Z

    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