Du kan faktiskt bara ändra kolumnordningen direkt, men jag skulle knappast rekommendera det, och du bör vara mycket försiktig om du bestämmer dig för att göra det.
t.ex.
# CREATE TABLE test (a int, b int, c int); # INSERT INTO test VALUES (1,2,3); # SELECT * FROM test; a | b | c ---+---+--- 1 | 2 | 3 (1 row)
Nu för det knepiga, du måste ansluta till din databas med postgres-användaren så att du kan ändra systemtabellerna.
# SELECT relname, relfilenode FROM pg_class WHERE relname='test'; relname | relfilenode ---------+------------- test_t | 27666 (1 row) # SELECT attrelid, attname, attnum FROM pg_attribute WHERE attrelid=27666; attrelid | attname | attnum ----------+----------+-------- 27666 | tableoid | -7 27666 | cmax | -6 27666 | xmax | -5 27666 | cmin | -4 27666 | xmin | -3 27666 | ctid | -1 27666 | b | 1 27666 | a | 2 27666 | c | 3 (9 rows)
attnum är en unik kolumn, så du måste använda ett tillfälligt värde när du ändrar kolumnnumren som sådana:
# UPDATE pg_attribute SET attnum=4 WHERE attname='a' AND attrelid=27666; UPDATE 1 # UPDATE pg_attribute SET attnum=1 WHERE attname='b' AND attrelid=27666; UPDATE 1 # UPDATE pg_attribute SET attnum=2 WHERE attname='a' AND attrelid=27666; UPDATE 1 # SELECT * FROM test; b | a | c ---+---+--- 1 | 2 | 3 (1 row)
Återigen, eftersom det här leker med databassystemtabeller, var extremt försiktig om du känner att du verkligen behöver göra detta.
Detta fungerar från och med postgres 8.3, med tidigare versioner kan din körsträcka variera.