default parameters for built-in functions (was Re: Documentation Update: Document pg_start_backup checkpoint behavior)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема default parameters for built-in functions (was Re: Documentation Update: Document pg_start_backup checkpoint behavior)
Дата
Msg-id 24148.1239060256@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: default parameters for built-in functions (was Re: Documentation Update: Document pg_start_backup checkpoint behavior)  (Alvaro Herrera <alvherre@commandprompt.com>)
Re: default parameters for built-in functions  (Gregory Stark <stark@enterprisedb.com>)
Re: default parameters for built-in functions (was Re: Documentation Update: Document pg_start_backup checkpoint behavior)  (Pavel Stehule <pavel.stehule@gmail.com>)
Список pgsql-hackers
I wrote:
> Bruce suggested what seemed like an excellent idea, which is to make
> this self-documenting using the new default-arguments feature ---
> it'll look something like this in \df:

>                              List of functions
>  Schema | Name | Result data type |          Argument data types           
> --------+------+------------------+----------------------------------------
>  public | foo  | integer          | label text, fast boolean DEFAULT false

On poking into this, it's a bit uglier to do than I first thought.
pg_proc.proargdefaults has to be the text representation of an
expression tree.  This means that to do it directly in pg_proc.h
would take writing something like

({CONST :consttype 16 :consttypmod -1 :constlen 1 :constbyval true :constisnull false :location -1 :constvalue 1 [ 0 0
00 ]})
 

Ugly as that is, it gets worse fast: the constvalue representation is
machine-dependent, both as to width and endianness.  And maintaining
such things in the face of expression tree changes would be no fun
either.

So I think that's out.  The only alternative that comes to mind is
to have initdb issue an additional SQL command to establish the default
after the bootstrap phase; that is, something like

CREATE OR REPLACE FUNCTION pg_start_backup(label text, fast boolean DEFAULT false) RETURNS text LANGUAGE internal
STRICTAS 'start_backup';
 

in system_views.sql or some such place.

Or we could just not bother with using a default here (ie, go back to
declaring two pg_proc entries).  It's not buying us all that much.

Comments?
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: unchecked out of memory in postmaster.c
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: default parameters for built-in functions (was Re: Documentation Update: Document pg_start_backup checkpoint behavior)