This has been fixed and will be in 7.4.1.
---------------------------------------------------------------------------
Vivek Khera wrote:
> >>>>> "LR" == Larry Rosenman <ler@lerctr.org> writes:
>
> >> I'd be curious to see the output of this program on other platforms
> >> and other compilers. I'm using gcc 2.95.4 as shipped with FreeBSD
> >> 4.8+.
> LR> this is with the UnixWare compiler:
> LR> $ cc -O -o testvk testvk.c
> LR> $ ./testvk
> LR> seconds = 3509
> LR> seconds1 = 3509000000
> LR> useconds = -452486
> LR> stepped diff = 3508547514
> LR> seconds2 = -785967296
> LR> seconds3 = 3509000000
> LR> diff = -786419782
> LR> long long diff = 3508547514
> LR> $
>
> LR> I think this is a C bug.
>
> Upon further reflection, I think so to. The entire RHS is long's so
> the arithmetic is done in longs, then assigned to a long long when
> done (after things have overflowed). Forcing any one of the RHS
> values to be long long causes the arithmetic to all be done using long
> longs, and then you get the numbers you expect.
>
> I think you only notice this in autovacuum when it takes a long time
> to complete the work, like my example of about 3500 seconds.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073