Yes. I have an idea. Did you add a column to the table using ALTER
TABLE. There was a bug in 6.4.* and earlier that caused this to happend
for added columns. Do a vacuum analyze on the table and the problem
will go away. Will be fixed in the next release.
> Further to the above: the error occurs on line 136 of the file
> src/backend/optimizer/path/orindxpath.c
>
> > 136 clausenode->selectivity = (Cost) floatVal(selecs);
>
>
>
> floatVal is a macro
>
> #define floatVal(v) (((Value *)v)->val.dval)
>
> where value is
>
> typedef struct Value
> {
> NodeTag type; /* tag appropriately
> (eg. T_String) */
> union ValUnion
> {
> char *str; /* string */
> long ival;
> double dval;
> } val;
> } Value;
>
> The variable selecs is of type list, i.e.
>
> typedef struct List
> {
> NodeTag type;
> union
> {
> void *ptr_value;
> int int_value;
> } elem;
> struct List *next;
> } List;
>
>
> The variable selecs is filled in in the routine best_or_subclause_index
> in orindxpath.c, where the value that is read via the floatVal macro is
> assigned from a float (called selec as well). So this seems wrong
> anyway.
>
> Unfortunately casting ptr_value to float gives garbage as well:
>
> (ladebug) p *(double*)selecs->elem.ptr_value
> 2.48515019858147e-321
> (ladebug) p *(float*)selecs->elem.ptr_value
> 1.3342e-312
>
>
> Any ideas?
>
> Adriaan
>
>
--
Bruce Momjian | http://www.op.net/~candle
maillist@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026