Обсуждение: Arbitrary whitespace restrictions on range types
Jeff, Hackers: Is there a strong reason why this has to error? postgres=# select '[,]'::TSTZRANGE postgres-# ; tstzrange ----------- (,) (1 row) postgres=# select '[, ]'::TSTZRANGE; ERROR: invalid input syntax for type timestamp with time zone: " " LINE 1: select '[, ]'::TSTZRANGE --Josh -- Josh Berkus PostgreSQL Experts Inc. http://pgexperts.com
On 18 December 2012 23:31, Josh Berkus <josh@agliodbs.com> wrote: > Jeff, Hackers: > > Is there a strong reason why this has to error? Having taken a look at the range I/O routines, I surmise that it was just easier to write range_parse() such that whitespace is included within <string> tokens: * Whitespace before or after <range> is ignored. Whitespace within a <string> * is taken literally and becomes part of the input string for that bound. I think that escaping the underlying literal values for parsing is a surprisingly difficult task, so I can see why the implementation would shrug in this case. This behaviour may be astonishing, but that doesn't make it a POLA violation. I don't have time to check now, but I'm pretty sure that doing something else would break a whole bunch of other common cases. -- Peter Geoghegan http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training and Services
On Wed, 2012-12-19 at 00:06 +0000, Peter Geoghegan wrote:
> On 18 December 2012 23:31, Josh Berkus <josh@agliodbs.com> wrote:
> > Jeff, Hackers:
> >
> > Is there a strong reason why this has to error?
>
> Having taken a look at the range I/O routines, I surmise that it was
> just easier to write range_parse() such that whitespace is included
> within <string> tokens:
There was some discussion about it, and the decision was made to match
record literal parsing for the sake of consistency. In a record literal,
spaces are considered to be a part of the value, so they are for range
types, as well.
Regards,
Jeff Davis