sql >> Databáze >  >> RDS >> PostgreSQL

Je možné změnit přirozené pořadí sloupců v Postgresu?

Ve skutečnosti můžete rovnou změnit pořadí sloupců, ale stěží bych to doporučil a měli byste být velmi opatrní, pokud se tak rozhodnete.

např.

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

Nyní k tomu složitějšímu, musíte se připojit ke své databázi pomocí uživatele postgres, abyste mohli upravovat systémové tabulky.

# 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 je jedinečný sloupec, takže při úpravě čísel sloupců jako takových musíte použít dočasnou hodnotu:

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

Opět, protože se jedná o hru s tabulkami databázového systému, buďte extrémně opatrní, pokud máte pocit, že to opravdu potřebujete.

Toto funguje od postgresu 8.3, s předchozími verzemi se může váš kilometrový výkon lišit.



  1. Co je @@MAX_PRECISION na serveru SQL Server?

  2. Požadavek nastaven v Concurrent Manager

  3. Jak změnit uživatelské heslo v PostgreSQL

  4. Jak najít průměr číselného sloupce v SQL