実際には、列の順序をまっすぐに変更することもできますが、お勧めすることはほとんどありません。変更する場合は、十分に注意する必要があります。
例
# 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)
ここで注意が必要なのは、postgresユーザーを使用してデータベースに接続し、システムテーブルを変更できるようにする必要があることです。
# 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は一意の列であるため、列番号を次のように変更する場合は、一時的な値を使用する必要があります。
# 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)
繰り返しになりますが、これはデータベースシステムテーブルで遊んでいるため、本当にこれを行う必要があると思われる場合は、細心の注意を払ってください。
これはpostgres8.3の時点で機能しており、以前のバージョンでは、マイレージが異なる場合があります。