PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah mungkin untuk mengubah urutan alami kolom di Postgres?

Anda sebenarnya dapat langsung mengubah urutan kolom, tetapi saya tidak merekomendasikannya, dan Anda harus sangat berhati-hati jika memutuskan untuk melakukannya.

mis.

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

Sekarang untuk bagian yang sulit, Anda perlu menghubungkan ke database Anda menggunakan pengguna postgres sehingga Anda dapat memodifikasi tabel sistem.

# 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 adalah kolom unik, jadi Anda perlu menggunakan nilai sementara saat Anda mengubah nomor kolom seperti:

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

Sekali lagi, karena ini bermain-main dengan tabel sistem database, berhati-hatilah jika Anda merasa benar-benar perlu melakukannya.

Ini berfungsi pada postgres 8.3, dengan versi sebelumnya, jarak tempuh Anda mungkin berbeda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemantauan PostgreSQL Penting - Bagian 3

  2. Cara mengatur nilai bidang variabel komposit menggunakan SQL dinamis

  3. Bagaimana cara mengelompokkan cap waktu ke dalam pulau (berdasarkan celah sewenang-wenang)?

  4. Cara Menghindari Looping Trigger Calls Di PostgreSQL 9.2.1

  5. kolom postgres X tidak ada