Re: Can I trigger an action from a coalesce ?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Can I trigger an action from a coalesce ?
Дата
Msg-id 7426.1582408953@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Can I trigger an action from a coalesce ?  (Christophe Pettus <xof@thebuild.com>)
Ответы Re: Can I trigger an action from a coalesce ?  (Christophe Pettus <xof@thebuild.com>)
Список pgsql-general
Christophe Pettus <xof@thebuild.com> writes:
> Something like this:

> create function supply_default() returns int as $$
> begin
>    raise notice 'Supplied default';
>    return 1;
> end;
> $$ immutable language plpgsql;

It's a really bad idea to mark a function that has side-effects
(i.e., emitting a NOTICE) as immutable, especially if the occurrence
of the side-effect at well-defined times is exactly what you're
desirous of.

> xof=# create table t ( i integer default supply_default(), t text );
> CREATE TABLE
> xof=# insert into t(i, t) values (2, 'text');
> INSERT 0 1
> xof=# insert into t(t) values ('text');
> NOTICE:  Supplied default
> INSERT 0 1

Other than the mislabeled volatility, I think this will mostly work.

Another possibility is to use a before-row-insert trigger
that does something like

    if new.i is null then
        begin
          new.i := whatever;
          raise notice 'Supplied default';
        end if;

This seems cleaner in principle, but a problem is that it can't tell
an inserted-by-default NULL from one that was intentionally supplied.
That might be OK if you never want the field to be null anyway.

            regards, tom lane



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

Предыдущее
От: Christophe Pettus
Дата:
Сообщение: Re: Can I trigger an action from a coalesce ?
Следующее
От: Christophe Pettus
Дата:
Сообщение: Re: Can I trigger an action from a coalesce ?