Thread: Add column and specify the column position in a table

Add column and specify the column position in a table

From
Emi Lu
Date:
Hello,

I am trying to insert one column to a specific position in a table.

In mysql, I can do:
. create table test(id varchar(3), name varchar(12));
. alter table test add column givename varchar(12) after id;


I am looking for similar things in postgresql to add a new column to the 
correct position in a table.

Could someone hint me please.

Thanks alot!
Ying Lu




Re: Add column and specify the column position in a table

From
Guillaume LELARGE
Date:
Emi Lu a écrit :
> I am trying to insert one column to a specific position in a table.
> 
> In mysql, I can do:
> . create table test(id varchar(3), name varchar(12));
> . alter table test add column givename varchar(12) after id;
> 
> 
> I am looking for similar things in postgresql to add a new column to the
> correct position in a table.
> 
> Could someone hint me please.
> 

There's no similar thing in PostgreSQL. You have to duplicate the table
to do it. You can do it in a transaction :

CREATE TABLE test (id varchar(3), name varchar(12));

then later :

BEGIN;
ALTER TABLE test RENAME TO oldtest;
CREATE TABLE test (id varchar(3), givename varchar(12), name varchar(12));
INSERT INTO test (id, name) SELECT id, name FROM oldtest;
DROP TABLE oldtest;
COMMIT;

Not really interesting if you have really big tables but, in fact, you
shouldn't rely on columns' order.

Regards.


-- 
Guillaume.


Re: Add column and specify the column position in a table

From
Alvaro Herrera
Date:
Guillaume LELARGE wrote:
> Emi Lu a écrit :
> > I am trying to insert one column to a specific position in a table.
> > 
> > In mysql, I can do:
> > . create table test(id varchar(3), name varchar(12));
> > . alter table test add column givename varchar(12) after id;
> > 
> > 
> > I am looking for similar things in postgresql to add a new column to the
> > correct position in a table.
> 
> There's no similar thing in PostgreSQL. You have to duplicate the table
> to do it.

... which is the same thing MySQL does, only you must do it explicitely.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


Re: Add column and specify the column position in a table

From
"Guillaume Lelarge"
Date:
2006/5/18, Alvaro Herrera <alvherre@commandprompt.com>:
> Guillaume LELARGE wrote:
> > Emi Lu a écrit :
> > > I am trying to insert one column to a specific position in a table.
> > >
> > > In mysql, I can do:
> > > . create table test(id varchar(3), name varchar(12));
> > > . alter table test add column givename varchar(12) after id;
> > >
> > >
> > > I am looking for similar things in postgresql to add a new column to the
> > > correct position in a table.
> >
> > There's no similar thing in PostgreSQL. You have to duplicate the table
> > to do it.
>
> ... which is the same thing MySQL does, only you must do it explicitely.
>

Do you mean that, using "alter table test add column" with the "after"
option, MySQL creates a new table, populates it with the old table
data and finally drops the old table ? I mean, there's the same
performance problem with big tables ?


--
Guillaume.


Re: Add column and specify the column position in a table

From
Andrew Sullivan
Date:
On Thu, May 18, 2006 at 05:43:19PM +0200, Guillaume Lelarge wrote:
> Do you mean that, using "alter table test add column" with the "after"
> option, MySQL creates a new table, populates it with the old table
> data and finally drops the old table ? I mean, there's the same
> performance problem with big tables ?

MySQL does that for a great deal of its DDL.  Yes, the performance is
awful for this on big tables.

The reason I didn't answer the OP's question, though, is that I can't
think of a legitimate reason to do this anyway.  The physical layout
of the columns should not be of concern to the developer, who should
be naming the columns anyway.

A

-- 
Andrew Sullivan  | ajs@crankycanuck.ca
The whole tendency of modern prose is away from concreteness.    --George Orwell


Re: Add column and specify the column position in a table

From
"Guillaume Lelarge"
Date:
2006/5/18, Andrew Sullivan <ajs@crankycanuck.ca>:
> On Thu, May 18, 2006 at 05:43:19PM +0200, Guillaume Lelarge wrote:
> > Do you mean that, using "alter table test add column" with the "after"
> > option, MySQL creates a new table, populates it with the old table
> > data and finally drops the old table ? I mean, there's the same
> > performance problem with big tables ?
>
> MySQL does that for a great deal of its DDL.  Yes, the performance is
> awful for this on big tables.
>
> The reason I didn't answer the OP's question, though, is that I can't
> think of a legitimate reason to do this anyway.  The physical layout
> of the columns should not be of concern to the developer, who should
> be naming the columns anyway.
>

I totally agree on the physical layout. Just being curious :)


--
Guillaume.