Re: Issue with default values and Rule

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Issue with default values and Rule
Дата
Msg-id 530F7A23.6000105@aklaver.com
обсуждение исходный текст
Ответ на Re: Issue with default values and Rule  (Dev Kumkar <devdas.kumkar@gmail.com>)
Ответы Re: Issue with default values and Rule  (Dev Kumkar <devdas.kumkar@gmail.com>)
Список pgsql-general
On 02/27/2014 08:51 AM, Dev Kumkar wrote:
> On Thu, Feb 27, 2014 at 9:32 PM, Adrian Klaver
> <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote:
>
>
>     Realized my previous answer:
>
>     col_2 = coalesce(my_test.col_2, NEW.col_2)
>
>     works for the particular situation you described, but not for the
>     general case. It would not allow an update of a field where a NON
>     NULL value exists and you want to change that value, as the existing
>     field would trump the new one.
>
>
> Yes, there you are. Changing the order in coalesce will not solve the
> issue here. As update will also have some real non-null NEW values.
> Actually internally when the rule gets called then default value is
> being in this case.
> However note that 'null' is being explicitly inserted then default value
> is not picked by postgres engine internally and data is persisted correctly:

That works because you said NULL is a valid value for the column. If you
had specified NOT NULL then you would get an error about violating the
NOT NULL constraint. Since you have said NULL is a valid value and you
actually specified it in the INSERT the following applies:

http://www.postgresql.org/docs/9.3/interactive/sql-createtable.html

DEFAULT default_expr
  ....

     The default expression will be used in any insert operation that
does not specify a value for the column. If there is no default for a
column, then the default is null.


>
>        create table my_test (id int, col_1 timestamp null, col_2
> varchar(12) null default 'Initial');
>
>        insert into my_test(id,col_1,col_2) values(1, now() at time zone
> 'UTC','ShowMe');
>        select * from my_test;
>        Results:
>        1,2014-02-27 16:34:23.464088,ShowMe
>
>        insert into my_test(id,col_1,col_2) values(1, now() at time zone
> 'UTC',null);
>        select * from my_test;
>        Results:
> 1,2014-02-27 16:35:49.206237,ShowMe
>
> Agree trigger might give more control here. But still suggest any
> breakthrough here.

>
> Regards...



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

Предыдущее
От: Dev Kumkar
Дата:
Сообщение: Re: Issue with default values and Rule
Следующее
От: Jeff Janes
Дата:
Сообщение: Re: Doubts after evaluating Xlogdump