Du kan faktisk ligefrem ændre kolonnerækkefølgen, men jeg vil næppe anbefale det, og du skal være meget forsigtig, hvis du beslutter dig for at gøre det.
f.eks.
# 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 til det vanskelige, skal du oprette forbindelse til din database ved hjælp af postgres-brugeren, så du kan ændre systemtabellerne.
# 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 er en unik kolonne, så du skal bruge en midlertidig værdi, når du ændrer kolonnenumrene som sådan:
# 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)
Igen, fordi dette spiller rundt med databasesystemtabeller, skal du være yderst forsigtig, hvis du føler, at du virkelig har brug for at gøre dette.
Dette fungerer fra postgres 8.3, med tidligere versioner kan dit antal kilometer variere.