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)
    

    繰り返しになりますが、これはデータベースシステムテーブルで遊んでいるため、本当にこれを行う必要があると思われる場合は、細心の注意を払ってください。

    これはpostgres8.3の時点で機能しており、以前のバージョンでは、マイレージが異なる場合があります。



    1. MariaDBの範囲内でランダムな整数を生成する方法

    2. MySQLとMariaDBで大量のデータを処理する

    3. SQL Server:SQLクエリを使用してテーブルの主キーを取得します

    4. pgpredict –PostgreSQLの予測分析