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
|
Список | 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 по дате отправления: