PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възможно ли е да се промени естествения ред на колоните в Postgres?

Всъщност можете просто да промените реда на колоните, но едва ли бих го препоръчал и трябва да бъдете много внимателни, ако решите да го направите.

напр.

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

Отново, тъй като това е игра със системните таблици на базата данни, бъдете изключително внимателни, ако смятате, че наистина трябва да направите това.

Това работи от postgres 8.3, с предишни версии, пробегът ви може да варира.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Драйвер JDBC PostgreSQL с Android

  2. Връщане на нечислови стойности от колона на PostgreSQL база данни

  3. Проста криптирана аритметична библиотека (SEAL) и променливата seal::Ciphertext

  4. Може ли PostgreSQL да има ограничение за уникалност върху елементите на масива?

  5. Максимален брой знаци в етикетите (имена на таблици, колони и т.н.)