PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist es möglich, die natürliche Reihenfolge der Spalten in Postgres zu ändern?

Sie können die Spaltenreihenfolge eigentlich einfach ändern, aber ich würde es kaum empfehlen, und Sie sollten sehr vorsichtig sein, wenn Sie sich dafür entscheiden.

zB.

# 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)

Nun zum kniffligen Teil:Sie müssen sich mit dem Postgres-Benutzer mit Ihrer Datenbank verbinden, damit Sie die Systemtabellen ändern können.

# 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 ist eine eindeutige Spalte, daher müssen Sie einen temporären Wert verwenden, wenn Sie die Spaltennummern als solche ändern:

# 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)

Da dies wiederum ein Herumspielen mit Datenbanksystemtabellen ist, seien Sie äußerst vorsichtig, wenn Sie das Gefühl haben, dass Sie dies wirklich tun müssen.

Dies funktioniert ab Postgres 8.3, bei früheren Versionen kann Ihr Kilometerstand variieren.