Обсуждение: GUC parameters accepts values in both octal and hexadecimal formats

Поиск
Список
Период
Сортировка

GUC parameters accepts values in both octal and hexadecimal formats

От
Haribabu Kommi
Дата:
Hi Hackers,

The Server GUC parameters accepts values in both Octal and hexadecimal formats also.

postgres=# set max_parallel_workers_per_gather='0x10';
postgres=# show max_parallel_workers_per_gather;
 max_parallel_workers_per_gather 
---------------------------------
 16

postgres=# set max_parallel_workers_per_gather='010';
postgres=# show max_parallel_workers_per_gather;
 max_parallel_workers_per_gather 
---------------------------------
 8

I can check that this behavior exists for quite some time, but I am not able to find any documentation related to it? Can some one point me to relevant section where it is available? If not exists, is it fine to add it?

Regards,
Haribabu Kommi
Fujitsu Australia

Re: GUC parameters accepts values in both octal and hexadecimalformats

От
Bruce Momjian
Дата:
On Tue, Jan  8, 2019 at 05:08:41PM +1100, Haribabu Kommi wrote:
> Hi Hackers,
> 
> The Server GUC parameters accepts values in both Octal and hexadecimal formats
> also.
> 
> postgres=# set max_parallel_workers_per_gather='0x10';
> postgres=# show max_parallel_workers_per_gather;
>  max_parallel_workers_per_gather 
> ---------------------------------
>  16
> 
> postgres=# set max_parallel_workers_per_gather='010';
> postgres=# show max_parallel_workers_per_gather;
>  max_parallel_workers_per_gather 
> ---------------------------------
>  8
> 
> I can check that this behavior exists for quite some time, but I am not able to
> find any documentation related to it? Can some one point me to relevant section
> where it is available? If not exists, is it fine to add it?

Well, we call strtol() in guc.c, and the strtol() manual page says:

    The string may begin with an arbitrary amount of white space (as
    determined by isspace(3)) followed by a single optional '+' or '-' sign.
    If base is zero or 16, the string  may  then include a "0x" prefix, and
    the number will be read in base 16; otherwise, a zero base is taken as
    10 (decimal) unless the next character is '0', in which case it is taken
    as 8 (octal).

so it looks like the behavior is just a side-effect of our strtol call. 
I am not sure it is worth documenting though.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +