Re: Since '2001-09-09 01:46:40'::timestamp microseconds are lost when extracting epoch
Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
From: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: David Steele <david@pgmasters.net>,
Pavel Stehule <pavel.stehule@gmail.com>,
Thomas Munro <thomas.munro@gmail.com>,
Petr Fedorov <petr.fedorov@phystech.edu>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-04-01T18:49:45Z
Lists: pgsql-bugs, pgsql-hackers
Attachments
- v6-0001-Change-return-type-of-EXTRACT-to-numeric.patch (text/plain) patch v6-0001
On 19.03.21 21:06, Tom Lane wrote: > Yeah, I was wondering if we could do something like that, but I hadn't > got as far as figuring a way to deal with divisors not a multiple of > NBASE. > > Looking at the proposed code, I wonder if it wouldn't be better to > define the function as taking the base-10-log of the divisor, so that > you'd have the number of digits to shift (and the dscale) immediately > instead of needing repeated integer divisions to get that. done that way, much simpler now > Also, the > risk of intermediate overflow here seems annoying: > > + if (unlikely(pg_mul_s64_overflow(val1, NBASE/x, &val1))) > + elog(ERROR, "overflow"); > > Maybe that's unreachable for the ranges of inputs the current patch could > create, but it seems like it makes the function distinctly less > general-purpose than one would think from its comment. Maybe, if that > overflows, we could handle the failure by making that adjustment after > we've converted to numeric? also done I also figured out a way to combine the float8 and numeric implementations so that there is not so much duplication. Added tests to cover all the edge and overflow cases. I think this is solid now. The extract(julian from timestamp) is still a bit in the slow mode, but as I previously stated, it's not documented and gives the wrong result, so it's not clear whether it should be fixed and what it should do. I think I'll register that part as an open item in any case, to see what we should do about that.
Commits
-
Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat.
- a65e9f3f1405 14.0 landed
-
Doc: fix discussion of how to get real Julian Dates.
- f6171e6843f0 9.6.22 landed
- c93f8f3b8d3b 14.0 landed
- 824df1cccb74 12.7 landed
- 7cd542023056 11.12 landed
- 7bbcfb4d584d 13.3 landed
- 56e234b6aff9 10.17 landed
-
Doc: document EXTRACT(JULIAN ...), improve Julian Date explanation.
- ec5bab9217cd 13.3 landed
- b391db4943dc 9.6.22 landed
- b230618ce875 12.7 landed
- 79a5928ebcb7 14.0 landed
- 64d617de3c59 10.17 landed
- 4b610547c27a 11.12 landed
-
Change return type of EXTRACT to numeric
- a2da77cdb466 14.0 landed
-
Improve our ability to regurgitate SQL-syntax function calls.
- 40c24bfef925 14.0 landed
-
Add more tests for EXTRACT of date type
- 540612fa469e 14.0 landed
-
Expose internal function for converting int64 to numeric
- 0aa8f764088e 14.0 landed
-
Change floating-point output format for improved performance.
- 02ddd499322a 12.0 cited