Thread: Add column and specify the column position in a table
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
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.
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.
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.
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
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.