Thread: Efficiency of CREATE TABLE AS

Efficiency of CREATE TABLE AS

From
Brian Herlihy
Date:
Hi,

If I do the following

CREATE TABLE foo AS SELECT * FROM bar

and a sequential scan is chosen as the plan (in particular, no ordering required), will the rows be written directly
intothe new table?  I am concerned about the case where there may be many gigabytes of data being copied between these
twotables.  And my precise concern is that the data may be stored temporarily before being placed in the new table,
slowingthings down. 

Thanks,
Brian



Re: Efficiency of CREATE TABLE AS

From
Tom Lane
Date:
Brian Herlihy <btherl@yahoo.com.au> writes:
> If I do the following
> CREATE TABLE foo AS SELECT * FROM bar
> and a sequential scan is chosen as the plan (in particular, no
> ordering required), will the rows be written directly into the new
> table?

Yes ... actually, the plan has nothing to do with it.

> I am concerned about the case where there may be many
> gigabytes of data being copied between these two tables.  And my
> precise concern is that the data may be stored temporarily before
> being placed in the new table, slowing things down.

No.  The computed tuples go to the new table, noplace else.  See
intorel_receive() and related code.

            regards, tom lane