I wrote: > However, when you poke at that a bit closer, it's not a license > for unlimited whitespace:
> regression=# select to_number('123 456', '999999'); > to_number > ----------- > 12345 > (1 row) > I've not tracked down the exact cause of that, but I think it > has to do with the fact that NUM_numpart_from_char() is willing > to eat a single leading space per call, even if it's not the > first call. I tried simply removing that bit: diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 3960235e14..366430863f 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -5134,12 +5134,6 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) (id == NUM_0 || id == NUM_9) ? "NUM_0/9" : id == NUM_DEC ? "NUM_DEC" : "???"); #endif - if (OVERLOAD_TEST) - return; - - if (*Np->inout_p == ' ') - Np->inout_p++; - if (OVERLOAD_TEST) return; All our regression tests still pass, and this example seems to behave more sanely: regression=# select to_number('123 456', '999999'); to_number ----------- 12345 (1 row) regression=# select to_number('123 456', '999999'); to_number ----------- 1234 (1 row) That might or might not be a behavior you like, but it's at least possible to see where it's coming from: it's eating the digits that appear within a six-character window, and not any more. Not sure if anyone would thank us for making this change though. I can't avoid the suspicion that somebody somewhere is depending on the current behavior. Anyway, this is getting off-topic for the current thread. regards, tom lane