Tom Lane wrote on 28.10.2011 16:21:
>>>> I just noticed that Postgres allows the following syntax:
>>>> create table foo
>>>> (
>>>> id integer constraint id_default_value default 42
>>>> );
>
>> I'm wondering why this doesn't throw an error then.
>
> It's an implementation artifact --- our grammar regards everything after
> a column's type name as a list of column constraints. So "DEFAULT foo"
> has to be considered as one variant of column constraint. We could
> probably tweak the grammar enough so it didn't allow "CONSTRAINT name"
> to be prefixed to that one case, but there seems little point in adding
> complexity for that. The most it would accomplish is to break
> applications that are expecting this particular deviation from spec to
> work.
Thanks for the explanation.
I have seen the syntax on SQL Server and there it does give the default definition a name. I was somewhat surprised
aboutthe syntax as I have never considered a default to be a constraint. So I checked the PostgreSQL manual just to
findthat the same syntax works there as well....
Regards
Thomas