Re: CTAS not honoring NOT NULL, DEFAULT modifiers - Mailing list pgsql-hackers

From Magnus Hagander
Subject Re: CTAS not honoring NOT NULL, DEFAULT modifiers
Date
Msg-id z2w9837222c1004190216uae508eb0yb7b24fbce7988234@mail.gmail.com
Whole thread Raw
In response to CTAS not honoring NOT NULL, DEFAULT modifiers  (Nikhil Sontakke <nikhil.sontakke@enterprisedb.com>)
Responses Re: CTAS not honoring NOT NULL, DEFAULT modifiers  (Nikhil Sontakke <nikhil.sontakke@enterprisedb.com>)
List pgsql-hackers
On Mon, Apr 19, 2010 at 08:32, Nikhil Sontakke
<nikhil.sontakke@enterprisedb.com> wrote:
> Hi,
>
> I saw this behavior with PG head:
>
> postgres=# create table x(x int default 8 not null);
> CREATE TABLE
> postgres=# create table x1 as select * from x;
> SELECT 0
> postgres=# \d x
>           Table "public.x"
>  Column |  Type   |     Modifiers
> --------+---------+--------------------
>  x      | integer | not null default 8
>
> postgres=# \d x1
>      Table "public.x1"
>  Column |  Type   | Modifiers
> --------+---------+-----------
>  x      | integer |
>
> Note that column x for table x1 did not get the not null modifier. It
> also did not get the default values.
>
> Was wondering what are the standards for CTAS. Oracle seems to honor
> the NOT NULL modifier. This might be a bug if we do not honor
> modifiers in CTAS.

Given that CREATE TABLE AS creates a table based on the result of a
query, it seems pretty logical that constraints wouldn't be copied
over - they're part of the table, they're not visible in a query
result.

The documentation pretty clearly says you should use CREATE TABLE LIKE
if you want to copy the constraints over, if you look at the CREATE
TABLE manpage (not on the CREATE TABLE AS though - perhaps a note
should be added there?)

-- Magnus HaganderMe: http://www.hagander.net/Work: http://www.redpill-linpro.com/


pgsql-hackers by date:

Previous
From: Simon Riggs
Date:
Subject: Re: [COMMITTERS] pgsql: Tune GetSnapshotData() during Hot Standby by avoiding loop
Next
From: Fujii Masao
Date:
Subject: Re: master in standby mode croaks