Re: [BUGS] BUG #1290: Default value and ALTER...TYPE

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [BUGS] BUG #1290: Default value and ALTER...TYPE
Дата
Msg-id 15501.1098370721@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [BUGS] BUG #1290: Default value and ALTER...TYPE  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [BUGS] BUG #1290: Default value and ALTER...TYPE  (Dennis Bjorklund <db@zigo.dhs.org>)
Список pgsql-hackers
Troels Arvin <troels@arvin.dk> writes:
> On Wed, 20 Oct 2004 14:07:29 -0400, Tom Lane wrote:
>> Hmm.  What's going on here is that the stored default expression is
>> actually of the form
>> ('TODO'::varchar)::varchar(2)

> Would it be possible to check the compatibility of a default value for
> the associated column?

I think that would introduce as many problems as it would fix.  AFAICS
the only way to make such a check is to evaluate the expression and see
what happens.  There are significant cases in which this is a bad idea
--- consider "default nextval('seq')".  I think people would be
justifiably upset if we changed the state of their sequences just
through installing such a default.

Another issue: consider a column definition likefoo integer not null
The default (NULL) is explicitly not a legal value for the column.
But this is not wrong, nor even bad practice.  The intent may be to
force users to explicitly supply a value in all cases.  Suppose that
you want to force that, but you want it to be okay to explicitly supply
NULL --- then you can't use "not null", so AFAICS the only way is to
specify a default value that will fail if used.  This works:

regression=# create table t1(f1 int default 'please supply a value'::text::int);
CREATE TABLE
regression=# insert into t1 default values;
ERROR:  invalid input syntax for integer: "please supply a value"
regression=#
        regards, tom lane


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: timestamp with time zone a la sql99
Следующее
От: Dennis Bjorklund
Дата:
Сообщение: Re: timestamp with time zone a la sql99