How do I ALTER the POSITION of a COLUMN in a Postgresql database? I've tried the following, but I was unsuccessful:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
How do I ALTER the POSITION of a COLUMN in a Postgresql database? I've tried the following, but I was unsuccessful:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
"Alter column position" in the PostgreSQL Wiki says:
PostgreSQL currently defines column order based on the
attnum
column of thepg_attribute
table. The only way to change column order is either by recreating the table, or by adding columns and rotating data until you reach the desired layout.
That's pretty weak, but in their defense, in standard SQL, there is no solution for repositioning a column either. Database brands that support changing the ordinal position of a column are defining an extension to SQL syntax.
One other idea occurs to me: you can define a VIEW
that specifies the order of columns how you like it, without changing the physical position of the column in the base table.
I don't think you can at present: see this article on the Postgresql wiki.
Also, the question is why you want to move the column, the other 2 posters have summed up the how, but something about your attempted query worries me:
37 columns is far too many.
If you're trying to move a column on table with that many columns, i suspect you are DoingItWrongTM
Yes, Postgres fails. I need to move columns to retain database structure clear. Machine doesn't care are columns ordered properly or not, it simply treats them as a bunch of data, human does. Which do you prefer, row (name, surname, age, height, weight) or row (height, surname, weight, age, name)? Indifferent for machine. Notice, I don't need the columns to be moved physically, all I need is columns to be displayed in a specified order when listing table sctructure and/or table contents.