Re: custom function for converting human readable sizes to bytes
Pavel Stehule <pavel.stehule@gmail.com>
From: Pavel Stehule <pavel.stehule@gmail.com>
To: "Shulgin, Oleksandr" <oleksandr.shulgin@zalando.de>
Cc: Robert Haas <robertmhaas@gmail.com>,
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>,
Alvaro Herrera <alvherre@2ndquadrant.com>,
Tom Lane <tgl@sss.pgh.pa.us>, Jim Nasby <Jim.Nasby@bluetreble.com>,
Corey Huinker <corey.huinker@gmail.com>,
Guillaume Lelarge <guillaume@lelarge.info>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2016-01-04T17:27:03Z
Lists: pgsql-hackers
2016-01-04 18:13 GMT+01:00 Shulgin, Oleksandr <oleksandr.shulgin@zalando.de>
:
> On Mon, Jan 4, 2016 at 6:03 PM, Pavel Stehule <pavel.stehule@gmail.com>
> wrote:
> >
> > 2016-01-04 17:48 GMT+01:00 Shulgin, Oleksandr <
> oleksandr.shulgin@zalando.de>:
> >>
> >> On Mon, Jan 4, 2016 at 4:51 PM, Robert Haas <robertmhaas@gmail.com>
> wrote:
> >>>
> >>> On Mon, Jan 4, 2016 at 10:17 AM, Pavel Stehule <
> pavel.stehule@gmail.com> wrote:
> >>> > [ new patch ]
> >>>
> >>> + case '-':
> >>> + ereport(ERROR,
> >>> + (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
> >>> + errmsg("size cannot be negative")));
> >>>
> >>> Why not? I bet if you copy any - sign to the buffer, this will Just
> Work.
> >>
> >>
> >> I'm also inclined on dropping that explicit check for empty string
> below and let numeric_in() error out on that. Does this look OK, or can it
> confuse someone:
>
>>
> >> postgres=# select pg_size_bytes('');
> >> ERROR: invalid input syntax for type numeric: ""
> >>
> >> ?
> >>
> >>> + if ( conv->base_unit == GUC_UNIT_KB &&
> >>
> >>
> >> Between "(" and "conv->..." I believe.
> >
> >
> > both fixed
>
> Hm...
>
> > + switch (*strptr)
> > + {
> > + /* ignore plus symbol */
> > + case '+':
> > + case '-':
> > + *bufptr++ = *strptr++;
> > + break;
> > + }
>
> Well, to that amount you don't need any special checks, I'm just not sure
> if reported error message is not misleading if we let numeric_in() handle
> all the errors. At least it can cope with the leading spaces, +/- and
> empty input quite well.
>
I don't would to catch a exception from numeric_in - so I try to solve some
simple situations, where I can raise possible better error message.
Regards
Pavel
>
> --
> Alex
>
>
Commits
-
Add pg_size_bytes() to parse human-readable size strings.
- 53874c5228fe 9.6.0 landed
-
Refactor check_functional_grouping() to use get_primary_key_attnos().
- f144f73242ac 9.6.0 cited
-
Correct comment in GetConflictingVirtualXIDs()
- 1129c2b0ad27 9.6.0 cited
-
Make extract() do something more reasonable with infinite datetimes.
- 647d87c56ab6 9.6.0 cited
-
pg_size_pretty: Format negative values similar to positive ones.
- 8a1fab36aba7 9.6.0 cited
-
pg_size_pretty(numeric)
- 4a2d7ad76f5f 9.2.0 cited